トップへ戻るニュースフォーラムFLASH-ML 過去ログBak@Flaダウンロードよくある質問と答
ログイン
ユーザ名:

パスワード:


パスワード紛失

新規登録
メインメニュー
メイン
   コーダーズルーム【スクリプト系】
     ドラッグ中にブラーをかけたい
投稿するにはまず登録を

スレッド表示 | 古いものから 前のトピック | 次のトピック | 下へ
投稿者 スレッド
e271828
Åê¹ÆNo.41032
投稿日時: 2008-12-15 17:09
新米
居住地:
投稿: 11
使用環境:
MacOSX,FlashCS3,Flash8
Re: ドラッグ中にブラーをかけたい
>>あにぃ様
はじめまして。
感動です、とてもシンプルで無駄無くよく動きます!
どうもありがとうございます。
XPのIE6、MacOSXのSafariで動作を確認できました。

ただ、今度はMacOSX(Tiger)、FireFox3上で、ドラッグしたまま外に出て離すと帰ってきた時にくっつく現象が起きました。あちらがたてばこちらが立たず、ですね…。みなさま、WindowsのFireFox上では動作は確認できますか?
あにぃ
Åê¹ÆNo.41027
投稿日時: 2008-12-15 9:27
職人
居住地: 北海道
投稿: 250
使用環境:
Flash8
FlashCS3
WinXP
FlashLite1.1 / 2.0
Re: ドラッグ中にブラーをかけたい
あー、なりますねぇ。苦笑
ENTER_FRAME時を以下に変えればOKかと思います。

function EnterFrame(event:Event):void {
	if (On) {
	 	if(theX==MC.x and theY=MC.y){
		 	mc.filters=null;//filterを適用
		}else{
			theX=mc.x;
			theY=mc.y;
		}
	}
	else if (On==false) {
		mc.filters=null;
	}
}

もしかしてマウスアップしてもマウス動かさないかぎりブラーが消えないかな。。。?
MOUSE_UPの中でもブラー消しておいたほうがいいかもです。


----------------
質問する際には、ご自分でできる限り調べてから投稿して下さい

P・S 職人おめでとう。(08/10/09)

TJFORD
Åê¹ÆNo.41026
投稿日時: 2008-12-15 2:28
半人前
居住地: Tokyo
投稿: 42
使用環境:
:Flash CS3
Re: ドラッグ中にブラーをかけたい
あにぃさんのスクリプトが良い感じですね。

一点気になるのがMOUSE_MOVEイベントのリスナー関数でブラーをかけるとマウスを動かしてピタッと止めたとき(マウスダウンしたまま)、ブラーがかかったままになってしまうんですよね。

自分はそれが嫌だったので、ENTER_FRAMEでブラーの値を変えてました。

そろそろまとまりそーですね。
あにぃ
Åê¹ÆNo.41025
投稿日時: 2008-12-14 23:35
職人
居住地: 北海道
投稿: 250
使用環境:
Flash8
FlashCS3
WinXP
FlashLite1.1 / 2.0
Re: ドラッグ中にブラーをかけたい

//初期設定領域
//MCの移動前座標格納用
var theX:Number=new Number();
var theY:Number=new Number();
var filter:BlurFilter= new BlurFilter();
filter.blurX;//定義だけ、Defaultが4なので、何もしなければ、4.0となる
filter.blurY;
filter.quality=BitmapFilterQuality.HIGH;
var On:Boolean=false;//mcが、mousedownされた時の制御変数で、初期値は、false
var xDistance:Number;//中央から、ドラッグされたX軸方向の距離
var yDistance:Number;//中央から、ドラッグされたY軸方向の距離

//以下、mcのドラッグ領域を、Rectangleで指定、今回は、ステージサイズを指定
var bounds:Rectangle=new Rectangle(0,0,mc.stage.stageWidth,mc.stage.stageHeight);//ドラッグ範囲
mc.buttonMode=true;//mcのボタン化

//メソッド定義領域
mc.addEventListener(MouseEvent.MOUSE_DOWN, Press);
mc.addEventListener(Event.ENTER_FRAME, EnterFrame);

function Press(event:MouseEvent):void {
	On=true;
	theX=mc.x;//移動前座標を格納
	theY=mc.y;//同様
	mc.startDrag(false,bounds);//どこか接触したなら、ステージ内でドラッグ
	stage.addEventListener(MouseEvent.MOUSE_UP, Release);
	stage.addEventListener(MouseEvent.MOUSE_MOVE, MouseMove);
}
function Release(event:MouseEvent):void {
	On=false;
	mc.stopDrag();
	mc.x=theX;//ステージ外だったときのため、元にもどれ
	mc.y=theY;//同様
	stage.removeEventListener(MouseEvent.MOUSE_UP, Release);
	stage.removeEventListener(MouseEvent.MOUSE_MOVE, MouseMove);
}
function MouseMove(event:MouseEvent):void {
	xDistance=Math.abs(mc.x-theX);//X軸方向の初期値からの、(blurXは、0?255.0の浮動少数点なので、)差分の絶対値
	yDistance=Math.abs(mc.y-theY);//Y軸方向の初期値からの、差分の絶対値
	filter.blurX=xDistance/2;//大きくなりすぎるので、1/2としました
	filter.blurY=yDistance/2;
	mc.filters=[filter];//filterを適用
	event.updateAfterEvent();
}
function EnterFrame(event:Event):void {
	if (On) {
		theX=mc.x;
		theY=mc.y;
	}
	else if (On==false) {
		mc.filters=null;
	}
}
//ここまで


joyko さんのソースをちょこっといじってみました。
こんなんではいかがでしょうか?


----------------
質問する際には、ご自分でできる限り調べてから投稿して下さい

P・S 職人おめでとう。(08/10/09)

e271828
Åê¹ÆNo.41022
投稿日時: 2008-12-14 19:52
新米
居住地:
投稿: 11
使用環境:
MacOSX,FlashCS3,Flash8
Re: ドラッグ中にブラーをかけたい
MacOSX(Tiger),FireFox3の環境ではさきほどのコードでバッチリたったのですが、safari、VMware上のIE6で試してみると仰せの通りぶっ飛んでしまいました・・・。MOUSE_LEAVEは環境に依存するようですね???

さて、対象の箇所をjoyko様のコードに差し替えてみたところ・・・safariではぶっ飛び現象は起きないようになりました!
IE6でも起きなくなったのですが、ドラッグしたまま外に出て領域外で離して戻ってくるとくっついたままになる現象が起こりました。

ううむ…Flashもいろいろなブラウザで試してみないとですね、勉強になりました。。さて、案が浮かばない…(汗
joyko
Åê¹ÆNo.41021
投稿日時: 2008-12-14 19:05
常連
居住地: 埼玉県
投稿: 167
使用環境:
WinXP(SP3)
Flash8 Basic
FlashCS3
Flash CS4
Re: ドラッグ中にブラーをかけたい
今回は、私も勉強になりました。
さて、当方のIE6.0で、高速で、ドラッグして、領域外に持っていくと、領域から外れて、戻って来ず、リロードしないと、それきりになるようです。

var bounds:Rectangle=new Rectangle(0,0,mc.stage.stageWidth,mc.stage.stageHeight);//ドラッグ範囲

mc.startDrag(false,bounds);//どこか接触したなら、ステージ内でドラッグ

を加えて、試してみてください。
e271828
Åê¹ÆNo.41020
投稿日時: 2008-12-14 18:16
新米
居住地:
投稿: 11
使用環境:
MacOSX,FlashCS3,Flash8
Re: ドラッグ中にブラーをかけたい
まだ問題は残っていたのですね、ウカウカしてました。

ポケットリファレンスを読んでいたら、FlashPlayerの領域外に出たとき送出されるイベントがあって、以下のコードを追加すると見事画面外までマウスが出ても変な挙動はしなくなりました!(プレビューでなく、パブリッシュしたswfでないとイベントが出ないようです)

stage.addEventListener(Event.MOUSE_LEAVE,onLeave);
function onLeave(e:Event):void{
//trace("onLeave");
mc.stopDrag();
}

また、僕の方では領域外にでない限りは、早く動かしてもマウスは外れない気がします。僕のできる限りの最高速で動かしてみた限りでは。すみませんが、こちらのswfを差し替えましたので触ってみていただけますか?

http://d.hatena.ne.jp/dasign/20081214
TJFORD
Åê¹ÆNo.41019
投稿日時: 2008-12-14 17:31
半人前
居住地: Tokyo
投稿: 42
使用環境:
:Flash CS3
Re: ドラッグ中にブラーをかけたい
こんにちは。

mouseXとかmouseYはたぶんmc.x、mc.yで問題ないかと思います。

私のスクリプト(e271828さんのスクリプトもそうですが)の問題点はマウスダウン中に画面外に出たときですね。
先ほど私が投稿したスクリプトに下記を追加すると外に出たときに変な動きになるのは避けられるのですが、今度はマウスを早く動かすとmcからマウスが外れるみたいでMOUSE_OUTが発生してしまします。

mc.addEventListener(MouseEvent.MOUSE_OUT, mouseOutHandler);

function mouseOutHandler(e:MouseEvent) {
flg = false;
mc.stopDrag();
}

課題は以下になるでしょうか。
1.マウスをはやく動かしてOK
2.画面外にマウスダウンしたまま出たときもOK


ちなみに私はflashはじめて1年ちょっとのペーペーなのでもっと他の賢者の方のスクリプトも見たいです。

どうぞよろしくお願いします。

e271828
Åê¹ÆNo.41017
投稿日時: 2008-12-14 15:12
新米
居住地:
投稿: 11
使用環境:
MacOSX,FlashCS3,Flash8
Re: ドラッグ中にブラーをかけたい
>>TJFORD様

これです!
この動き。。
どうもありがとうございます…!

位置取得にmouseX,mouseYですか、なるほどー
クリックされたらenterFrameで位置取得とブラー処理。マウスダウン、マウスアップにフラグをつけてアップされたらブラーを弱める、差が1以下になったらブラー消す。という感じでしょうか。間違ってたらご指摘願います!


実は、僕自身もしばらく考えていてつい先ほどこれとは別の解決法を見出していました。基本的アイデアはよく似ていて、クリックされたら時間間隔ごとにブラーを掛けるというものです。
こちらにソースコードと解説を用意いたしましたので、興味の有る方はこちらも見てみてください

http://d.hatena.ne.jp/dasign/20081214

面白いですねぇ、プログラミングは面白いとつくづく思います。
どうもお世話になりました。今後ともよろしくお願い致します。



joyko
Åê¹ÆNo.41016
投稿日時: 2008-12-14 14:34
常連
居住地: 埼玉県
投稿: 167
使用環境:
WinXP(SP3)
Flash8 Basic
FlashCS3
Flash CS4
Re: ドラッグ中にブラーをかけたい
TJFORDさん、
停止すると、リリースする前に、見事に、ブラー効果がなくなりました!
私も勉強になりました。
(1) 2 »
スレッド表示 | 古いものから 前のトピック | 次のトピック | トップ

投稿するにはまず登録を
 
Copyright (C) 2003 FLASH-japan. All rights reserved.
Powered by Xoops