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

パスワード:


パスワード紛失

新規登録
メインメニュー
メイン
   迷える子羊の部屋【初心者専用】
     マウスが止まった時を知るには?
投稿するにはまず登録を

スレッド表示 | 古いものから 前のトピック | 次のトピック | 下へ
投稿者 スレッド
FujikawaT
Åê¹ÆNo.24419
投稿日時: 2006-3-23 0:08
新米
居住地:
投稿: 14
使用環境:
WinXP,Flash8
Re: マウスが止まった時を知るには?
>if(mc.onEnterFrame == action)
また面白いものを。試してみました。
雰囲気的には分かりますが理屈はさっぱり。
いつか分かるときが来ると精進します
永井勝則
Åê¹ÆNo.24405
投稿日時: 2006-3-21 19:57
職人
居住地: 白馬村
投稿: 796
使用環境:
Windows 7 :Flash CS4:
10.6.8 :Flash CS5.5
Re: マウスが止まった時を知るには?
例として面白いかどうかは分かりませんが、こんなトリッキー?な書き方もできます。
動作対象となるムービークリップを、ことさらaction()関数で指定しなくても動作対象が切り替わる点と、
if(mc.onEnterFrame == action){
}
などとやっているところです。

//マウスを左右に動かして、動作するムービークリップを切り替えるサンプル

//
//ステージにmc1_mc、mc2_mcを置く
//これらは10フレームほどの長さでアニメーションするムービークリップで、
//1フレームにはstop()が記述してある。
//message_txtというダイナミックテキストをステージに置く。
var mouseX:Number = _xmouse;
var stageCenterX:Number = Stage.width/2;
var mc1_mc:MovieClip;
var mc2_mc:MovieClip;
var message_txt:TextField;
_root.onEnterFrame = function() {
	mouseX = _xmouse;
	//trace(mouseX);
	//trace(stageCenterX);
	if (mouseX>=stageCenterX) {
		//trace("ステージ右半分");
		//マウスが右にあるとmc1_mcを動作させる
		delete mc2_mc.onEnterFrame;
		mc1_mc.onEnterFrame = action;
	} else {
		//trace("ステージ左半分");
		//マウスが左にあるとmc1_mcを動作させる
		delete mc1_mc.onEnterFrame;
		mc2_mc.onEnterFrame = action;
	}
	if (mc1_mc.onEnterFrame == action) {
		mc1_mc._alpha += 5;
		mc2_mc._alpha -= 5;
	} else if (mc2_mc.onEnterFrame == action) {
		mc1_mc._alpha -= 5;
		mc2_mc._alpha += 5;
	}
};
//
function action():Void {
	this.play();
	message_txt.text = this._name+" : PLAY";
}


----------------
永井勝則:
himco.jp :

FujikawaT
Åê¹ÆNo.24404
投稿日時: 2006-3-21 17:30
新米
居住地:
投稿: 14
使用環境:
WinXP,Flash8
Re: マウスが止まった時を知るには?
まだ理解不足なので今後少しずつ自分の中で修正していきます。
this.onRelease =function(){
xTrace();
}
と、今までやっていましたが、
これは関数リテラルを扱う書式だったんですね。
this.onRelease=xTrace;
でOKだと、理屈が分かると面白いです。
ただ、引数があるときは、
前者の書き方をする必要があるみたいですが。
ありがとうございます。
FujikawaT
Åê¹ÆNo.24403
投稿日時: 2006-3-21 17:29
新米
居住地:
投稿: 14
使用環境:
WinXP,Flash8
Re: マウスが止まった時を知るには?
>this.onEnterFrameとか_root.onEnterFrameという参照元を示した書き方にしていないので、
以前こちらのBBSで教えて頂いたので、なんとか理解できました。

>スクリプトの流れを説明すると、
isMouseMovingで判断してるif文を削除しても、
マウスの動きを検知してるようです。
onEnterFrame = mouseStopping;
は、次のフレームに移行するときに実行されると考えて、
フレーム移行前にマウスが動けば、
onEnterFrame = mouseMoving;で上書きされると思いました。
(1fpsにすると感度が落ちます)

>マウスの位置をフレームに入るたびに調べる、という方法
onEnterFrameで実行の予約(?)のようなものと、
上書きによって予約の取り消しが出来るのが分かりました。
知らないことが沢山ありました。ありがとうございます。
野中文雄
Åê¹ÆNo.24394
投稿日時: 2006-3-21 2:10
ちょんまげら
居住地: 東京
投稿: 4531
使用環境:
CS5.5 .6.8 Vista Home Premium (SP1)
Re: マウスが止まった時を知るには?
ECMAScriptでは、メソッドもプロパティ(PDF約280KB)と考えて差し支えないでしょう。
引用:
永井勝則さんは書きました:
onEnterFrameもひとつのプロパティであると考えると分かりやすいかと思います。

イベントハンドラメソッドの定義方法については、拙著p.111?(PDF約260KB)をご参照ください。
引用:
FujikawaTさんは書きました:
まず、onEnterFrame = mouseMoving;は、
初めて知った書き方なのでが、


----------------
 

永井勝則
Åê¹ÆNo.24391
投稿日時: 2006-3-20 19:13
職人
居住地: 白馬村
投稿: 796
使用環境:
Windows 7 :Flash CS4:
10.6.8 :Flash CS5.5
Re: マウスが止まった時を知るには?
this.onEnterFrameとか_root.onEnterFrameという参照元を示した書き方にしていないので、
何を参照しているかを意識する必要があります。

ここのonEnterFrameは_rootのイベントハンドラです。
これを別のムービークリップ.onEnterFrameにすると、その別のムービークリップのイベントハンドラになります。

以下は私のとらえ方であって、嘘が混じっているかも知れませんが、
onEnterFrameもプロパティだと考えると、
mc.atai = 16; も、mc.onEnterFrame = movieMoving;
も、ムービークリップmcのプロパティに値を代入している、と見なせます。
(厳密にいうと後者は参照の代入;参照の代入なんて何という日本語!?)
(_rootもムービークリップです)
onEnterFrameというのはFunctionという型のオブジェクトです。
つまり、_root.onEnterFrameという_rootのプロパティにmovieMovingという値を設定している、
そのmovieMovingというのはFunctionという型のオブジェクトである、ということです。日本語ではないですねこれは。

引用:
まず、onEnterFrame = mouseMoving;は、
初めて知った書き方なのでが、
onEnterFrame =function(){
mouseMoving();
}
ということでは無いんですよね?どういうことなんでしょうか?
これだとフレームレートによって感度が変わってしまいますし。

スクリプトの流れを説明すると、
1)isMouseMovingがfalseのときだけ、onEnterFrameはmouseMovingになります。
ここでisMouseMovingはtrueになるので、マウスが動き続ける限りは
onEnterFrame = mouseMoving;は実行されないはずです。
2)で、mouseMoving関数は何をやるかというと、isMouseMovingがtrueのときだけ
onEnterFrame = mouseStopping;が実行されます。

onEnterFrameで何かを動かしたいならisMouseMovingで行っている繰り返し動作のチェックをやめ、
delete onEnterFrameを削除すると
onEnterFrame = mouseMovingやmouseStoppingは繰り返し実行されます。

スクリプトの各行で何をやっているかは、こまめにtrace()すると理解の助けになります。
またtrace(mouseMoving);なども実行してみると理解は深まるかも。

プロパティとか参照とか、型とかオブジェクトとか、何のことやら???
という場合は、参考書などをあたってください。


----------------
永井勝則:
himco.jp :

FujikawaT
Åê¹ÆNo.24389
投稿日時: 2006-3-20 18:30
新米
居住地:
投稿: 14
使用環境:
WinXP,Flash8
Re: マウスが止まった時を知るには?
>レスをおつけにならないのでしょうか?
これはお恥ずかしい。明日の夜までにお返事いたします。
FujikawaT
Åê¹ÆNo.24388
投稿日時: 2006-3-20 18:28
新米
居住地:
投稿: 14
使用環境:
WinXP,Flash8
Re: マウスが止まった時を知るには?
サンプルありがとうございます。動きました^^
少し分からない点があるのですが、お聞きしてよろしいでしょうか?
間違っていたらご指摘ください。

まず、onEnterFrame = mouseMoving;は、
初めて知った書き方なのでが、
onEnterFrame =function(){
mouseMoving();
}
ということでは無いんですよね?どういうことなんでしょうか?
これだとフレームレートによって感度が変わってしまいますし。

あと、AS本体の流れなのですが、
1)onEnterFrame = mouseMoving;
で"動いている"と判断します。
2)動いている間は絶えず1)が実行されるので、
onEnterFrame = mouseStopping;は破棄(1)が上書き)され続ける
3)マウスが止まるとonEnterFrame = mouseStopping;が、
最後まで実行されるので"とまっている"と判断する
4)例外として、2)のonEnterFrame = mouseStopping;が破棄される前に、
止まって再び動けば"止まっている"と判断されない。

いかがでしょうか?奥が深いんですねぇ?

>(つまりMovieClipクラスにonEnterFrameが定義してある)
なるほど納得出来ました。
ひろゆき
Åê¹ÆNo.24386
投稿日時: 2006-3-20 17:01
ちょんまげら
居住地: 東京砂漠
投稿: 4403
使用環境:
10.8.5

Flash Professional CS4/CS6/CC

Safari 6.1
Re: マウスが止まった時を知るには?
attachMovieの深度とonRelease」には
レスをおつけにならないのでしょうか?

#ご自分が投稿された記事は、ログインして「アカウント情報」で確認できます。

引用:
onEnterFrameの意味を知っているのはMovieClipオブジェクトになるのではないか推測します。
(つまりMovieClipクラスにonEnterFrameが定義してある)

逆に言えば、Objectには、onEnterFrame が用意されていないので、
Object.onEnterFrame = function() {} としても、動かないってことですね。


----------------
質問する際は、回答者に具体的な情報を与えてください。

永井勝則
Åê¹ÆNo.24385
投稿日時: 2006-3-20 16:50
職人
居住地: 白馬村
投稿: 796
使用環境:
Windows 7 :Flash CS4:
10.6.8 :Flash CS5.5
Re: マウスが止まった時を知るには?
マウスが止まっているかどうかを知るには、質問に書かれているマウスの位置をフレームに入るたびに調べる、という方法で分かると思います。

またMouseのonMouseMoveイベントリスナーは、マウスの移動を感知します。


//メインのタイムラインのフレーム1
var someListener:Object = new Object();
var isMouseMoving:Boolean = false;
someListener.onMouseMove = function() {
	if (!isMouseMoving) {
		onEnterFrame = mouseMoving;
		isMouseMoving = true;
	}
};
Mouse.addListener(someListener);
function mouseMoving() {
	trace("マウスは動いている");
	if (isMouseMoving) {
		onEnterFrame = mouseStopping;
		isMouseMoving = false;
	}
}
function mouseStopping() {
	trace("マウスは止まっている");
	delete onEnterFrame;
}



また、下記では"test"と出力されます。
これはmyObjという汎用オブジェクトにonEnterFrame()という関数を定義していることと同じです。
onEnterFrameの意味を知っているのはMovieClipオブジェクトになるのではないか推測します。
(つまりMovieClipクラスにonEnterFrameが定義してある)

var myObj:Object = new Object();
myObj.onEnterFrame = function() {
	trace("test");
};
myObj.onEnterFrame();
//"test"が出力される


onEnterFrameもひとつのプロパティであると考えると分かりやすいかと思います。
なお、用語の使用は野中さんほど正確ではないので、”うのみ”にはしないでくださいね。


----------------
永井勝則:
himco.jp :

(1) 2 »
スレッド表示 | 古いものから 前のトピック | 次のトピック | トップ

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