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

パスワード:


パスワード紛失

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

スレッド表示 | 新しいものから 前のトピック | 次のトピック | 下へ
投稿者 スレッド
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.41022
投稿日時: 2008-12-14 19:52
新米
居住地:
投稿: 11
使用環境:
MacOSX,FlashCS3,Flash8
Re: ドラッグ中にブラーをかけたい
MacOSX(Tiger),FireFox3の環境ではさきほどのコードでバッチリたったのですが、safari、VMware上のIE6で試してみると仰せの通りぶっ飛んでしまいました・・・。MOUSE_LEAVEは環境に依存するようですね???

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

ううむ…Flashもいろいろなブラウザで試してみないとですね、勉強になりました。。さて、案が浮かばない…(汗
あにぃ
Åê¹Æ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)

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

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

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

そろそろまとまりそーですね。
あにぃ
Åê¹Æ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)

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

ただ、今度はMacOSX(Tiger)、FireFox3上で、ドラッグしたまま外に出て離すと帰ってきた時にくっつく現象が起きました。あちらがたてばこちらが立たず、ですね…。みなさま、WindowsのFireFox上では動作は確認できますか?
« 1 (2)
スレッド表示 | 新しいものから 前のトピック | 次のトピック | トップ

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