![]() ![]() ![]() | 投稿するにはまず登録を |
スレッド表示 | 新しいものから | 前のトピック | 次のトピック | 下へ |
投稿者 | スレッド |
---|---|
FujikawaT | Åê¹ÆNo.24383 投稿日時: 2006-3-20 14:48 |
新米 ![]() ![]() 居住地: 投稿: 14
使用環境:
WinXP,Flash8 |
マウスが止まった時を知るには? マウスが止まった事を調べる方法はあるでしょうか?
今は_root.onEnterFrameで、 現在のマウス位置と1フレ前の位置を比較して、 同じなら止まっていると判断させています。 あと、他の関数で_root.onEnterFrameを使うと、 古い_root.onEnterFrameは破棄されますよね? それを回避しようと試しに、 myObj =new Obect(); myObj.onEnterFrame =function(){ trace("test"); } としてみましたが、出力されません。 実際にMCを配置する必要があるのでしょうか? よろしくお願いします。 |
永井勝則 | Åê¹ÆNo.24385 投稿日時: 2006-3-20 16:50 |
職人 ![]() ![]() 居住地: 白馬村 投稿: 796
使用環境:
![]() ![]() |
Re: マウスが止まった時を知るには? マウスが止まっているかどうかを知るには、質問に書かれているマウスの位置をフレームに入るたびに調べる、という方法で分かると思います。
またMouseのonMouseMoveイベントリスナーは、マウスの移動を感知します。
また、下記では"test"と出力されます。 これはmyObjという汎用オブジェクトにonEnterFrame()という関数を定義していることと同じです。 onEnterFrameの意味を知っているのはMovieClipオブジェクトになるのではないか推測します。 (つまりMovieClipクラスにonEnterFrameが定義してある)
onEnterFrameもひとつのプロパティであると考えると分かりやすいかと思います。 なお、用語の使用は野中さんほど正確ではないので、”うのみ”にはしないでくださいね。 ![]()
|
ひろゆき | Åê¹ÆNo.24386 投稿日時: 2006-3-20 17:01 |
ちょんまげら ![]() ![]() 居住地: 東京砂漠 投稿: 4403
使用環境:
![]() ![]() Safari 6.1 |
Re: マウスが止まった時を知るには? 「attachMovieの深度とonRelease」には
レスをおつけにならないのでしょうか? #ご自分が投稿された記事は、ログインして「アカウント情報」で確認できます。 引用: onEnterFrameの意味を知っているのはMovieClipオブジェクトになるのではないか推測します。 逆に言えば、Objectには、onEnterFrame が用意されていないので、 Object.onEnterFrame = function() {} としても、動かないってことですね。
|
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が定義してある) なるほど納得出来ました。 |
FujikawaT | Åê¹ÆNo.24389 投稿日時: 2006-3-20 18:30 |
新米 ![]() ![]() 居住地: 投稿: 14
使用環境:
WinXP,Flash8 |
Re: マウスが止まった時を知るには? >レスをおつけにならないのでしょうか?
これはお恥ずかしい。明日の夜までにお返事いたします。 |
永井勝則 | Åê¹ÆNo.24391 投稿日時: 2006-3-20 19:13 |
職人 ![]() ![]() 居住地: 白馬村 投稿: 796
使用環境:
![]() ![]() |
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;は、 スクリプトの流れを説明すると、 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);なども実行してみると理解は深まるかも。 プロパティとか参照とか、型とかオブジェクトとか、何のことやら??? という場合は、参考書などをあたってください。
|
野中文雄 | Åê¹ÆNo.24394 投稿日時: 2006-3-21 2:10 |
ちょんまげら ![]() ![]() 居住地: 東京 投稿: 4531
使用環境:
![]() ![]() ![]() |
Re: マウスが止まった時を知るには? ECMAScriptでは、メソッドもプロパティ(PDF約280KB)と考えて差し支えないでしょう。
引用: 永井勝則さんは書きました: イベントハンドラメソッドの定義方法については、拙著のp.111?(PDF約260KB)をご参照ください。 引用: FujikawaTさんは書きました: |
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で実行の予約(?)のようなものと、 上書きによって予約の取り消しが出来るのが分かりました。 知らないことが沢山ありました。ありがとうございます。 |
FujikawaT | Åê¹ÆNo.24404 投稿日時: 2006-3-21 17:30 |
新米 ![]() ![]() 居住地: 投稿: 14
使用環境:
WinXP,Flash8 |
Re: マウスが止まった時を知るには? まだ理解不足なので今後少しずつ自分の中で修正していきます。
this.onRelease =function(){ xTrace(); } と、今までやっていましたが、 これは関数リテラルを扱う書式だったんですね。 this.onRelease=xTrace; でOKだと、理屈が分かると面白いです。 ただ、引数があるときは、 前者の書き方をする必要があるみたいですが。 ありがとうございます。 |
永井勝則 | Åê¹ÆNo.24405 投稿日時: 2006-3-21 19:57 |
職人 ![]() ![]() 居住地: 白馬村 投稿: 796
使用環境:
![]() ![]() |
Re: マウスが止まった時を知るには? 例として面白いかどうかは分かりませんが、こんなトリッキー?な書き方もできます。
動作対象となるムービークリップを、ことさらaction()関数で指定しなくても動作対象が切り替わる点と、 if(mc.onEnterFrame == action){ } などとやっているところです。
|
(1) 2 » |
スレッド表示 | 新しいものから | 前のトピック | 次のトピック | トップ |
投稿するにはまず登録を | |