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

パスワード:


パスワード紛失

新規登録
メインメニュー
メイン
   ActionScript 3.0 特設会議室
     表示領域全体からのマウスアウトの検出方法
投稿するにはまず登録を

スレッド表示 | 新しいものから 前のトピック | 次のトピック | 下へ
投稿者 スレッド
HogeO
Åê¹ÆNo.41286
投稿日時: 2009-1-22 21:26
新米
居住地:
投稿: 7
使用環境:
表示領域全体からのマウスアウトの検出方法
SWFの表示領域全体からマウスが離れた場合、
警告を表示しようと思っています。

そこでメインのスプライトのステージのマウスイベントを
拾おうと思ったのですが、うまく取得できません。

以下のAPIを使っています。
ハンドリングした関数いずれも呼ばれませんでした。

mainStage.addEventListener(MouseEvent.MOUSE_OVER, onMouseOver);
mainStage.addEventListener(MouseEvent.MOUSE_OUT, onMouseOut);
mainStage.addEventListener(MouseEvent.ROLL_OVER, onRollOver);
mainStage.addEventListener(MouseEvent.ROLL_OUT, onRollOut);

mainStageはドキュメントクラスの持つstageです。
ひょっとして別の取得方法があるのでしょうか?

永井勝則
Åê¹ÆNo.41295
投稿日時: 2009-1-23 14:40
職人
居住地: 白馬村
投稿: 796
使用環境:
Windows 7 :Flash CS4:
10.6.8 :Flash CS5.5
Re: 表示領域全体からのマウスアウトの検出方法
StageクラスにmouseLeaveというイベントがあります。

stage.addEventListener(Event.MOUSE_LEAVE, mouseLeaveListener);

function mouseMoveListener(e:MouseEvent):void {
	trace("入った");
	stage.removeEventListener(MouseEvent.MOUSE_MOVE, mouseMoveListener);
	stage.addEventListener(Event.MOUSE_LEAVE, mouseLeaveListener);
}

function mouseLeaveListener(e:Event):void {
	trace("出た");
	stage.removeEventListener(Event.MOUSE_LEAVE, mouseLeaveListener);
	stage.addEventListener(MouseEvent.MOUSE_MOVE, mouseMoveListener);
}


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

HogeO
Åê¹ÆNo.41297
投稿日時: 2009-1-23 15:43
新米
居住地:
投稿: 7
使用環境:
Re: 表示領域全体からのマウスアウトの検出方法
回答ありがとうございます。

試してみたところ検出することが出来ました。
(Eventクラスにあるとは盲点でした^^;)

また何かあれば、よろしくお願いいたします。
永井勝則
Åê¹ÆNo.41299
投稿日時: 2009-1-23 16:52
職人
居住地: 白馬村
投稿: 796
使用環境:
Windows 7 :Flash CS4:
10.6.8 :Flash CS5.5
Re: 表示領域全体からのマウスアウトの検出方法
EventクラスにMOUSE_LEAVEがあるのは確かに”盲点”ですが、
問題は知っているかどうかではなく、調べることができるかどうかにあります。
mouseLeaveイベントがStageクラスにあるなどということはそれを考えた人くらいしか知らないわけで、
大方の人は調べることになります。

で、オンラインヘルプなどで、マウスがステージから出たことはMouseEventで何とかなるだろう、とめぼしをつけ、
MouseEventクラスを調べます。

すると[継承されるパブリック定数を表示]リンクをクリックした状態で、MOUSE_LEAVEという定数がEventクラスにあるらしいことが分かります。

そこでこのリンクをクリックすると、EventクラスのMOUSE_LEAVE定数に飛びます。
するとその項の[関連項目]に[flash.display.Stage.mouseLeave]リンクがあり、
どうやらStageにmouseLeaveなにがしというのがあるらしい
ことが分かります。

このリンクをクリックするとStageクラスのmouseLeaveイベントに飛びます。
するとどうやら今回の質問の答えの手がかりになりそうなことが書かれているので、実際に試してみる、
ということになります。

多くの答えやヒントはこのようにヘルプにあるのですが、なにぶん広大なので、
リンクをたどるうちに、何を調べようとしていたのかを忘れてしまいそうになります。

ポイントは[継承されるXXを表示]リンクはクリックすることと、
迷子にならないように、自分は今どこにいるかを自覚しながら調べることです。

Flashのヘルプでもオンラインヘルプでもよいので、一時的なしおりのようなものがあったら便利です。


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

ぷらぷら
Åê¹ÆNo.45297
投稿日時: 2010-7-8 17:08
新米
居住地: 静岡
投稿: 8
使用環境:
10.6.4
CS3/CS4 ActionScript v3
Re: 表示領域全体からのマウスアウトの検出方法
私もこちらの記事を参考にスクリプトを組ませて頂きました・・・が、
私が作業している環境・・・
Mac OSX10.6.4 + Flash CS3 / CS4 では、stageの"mouseLeave"イベントが発生せず、マウスが外に出たことが検出できませんでした。
そこで試しに、winXP sp3 + Flash CS3で同じflaファイルをパブリッシュしてテストしたところ、こちらでは全く正しく動作しました。

OSX側は、何かファイルが壊れてこのような現象が発生しているのでしょうか?
正しく動作させるために対策方法はありますでしょうか?

よろしく教えてください。
vader
Åê¹ÆNo.45298
投稿日時: 2010-7-9 1:39
常連
居住地: 東京
投稿: 76
使用環境:
MacOS10.8,FlashCS6
Re: 表示領域全体からのマウスアウトの検出方法
kinPLAさん、こんにちわ。

Mac OS10.6.3
Flash CS4

で確認しましたが、確かにパブリッシュプレビューではMOUSE_LEAVEが
反応しないですね。

ただ、ブラウザでプレビューするとしっかりと動作しているようです。
Safari4
Firefox3.5
で確認しました。

stage.addEventListener(MouseEvent.MOUSE_MOVE, mouseMoveListener);

function mouseMoveListener(e:MouseEvent):void {
	ExternalInterface.call("function(){ java script:alert('入った'); }");
	stage.removeEventListener(MouseEvent.MOUSE_MOVE, mouseMoveListener);
	stage.addEventListener(Event.MOUSE_LEAVE, mouseLeaveListener);
}

function mouseLeaveListener(e:Event):void {
	ExternalInterface.call("function(){ java script:alert('出た'); }");
	stage.removeEventListener(Event.MOUSE_LEAVE, mouseLeaveListener);
	stage.addEventListener(MouseEvent.MOUSE_MOVE, mouseMoveListener);
}

以上、頑張ってください。

///// 追記 /////
上記コード内のjavascriptのaとsの間の半角スペースは、消して試して下さい。
ぷらぷら
Åê¹ÆNo.45300
投稿日時: 2010-7-9 13:25
新米
居住地: 静岡
投稿: 8
使用環境:
10.6.4
CS3/CS4 ActionScript v3
Re: 表示領域全体からのマウスアウトの検出方法
ご回答ありがとうございます。

なるほど、私はSWFファイルをパブリッシュしただけで、
さらに深く調べませんでした。

初心者にとって、ここはとても心強いヘルプです。
まだお礼しかできませんが、これからもよろしくお願いします。

本当にありがとうございました。
スレッド表示 | 新しいものから 前のトピック | 次のトピック | トップ

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