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

パスワード:


パスワード紛失

新規登録
メインメニュー
メイン
   ActionScript 3.0 特設会議室
     イベトリスナーについて
投稿するにはまず登録を

スレッド表示 | 新しいものから 前のトピック | 次のトピック | 下へ
投稿者 スレッド
kirarin
Åê¹ÆNo.38027
投稿日時: 2008-3-14 16:36
職人
居住地: 彩の国
投稿: 214
使用環境:
Windows7
IE 8
Flash CS4
Flash Player WIN 10,0,45,2
-------------------------
WindowsXP Professional SP3
IE7.0
Flash 8 Professional
Flash Player 10.0.12.36
-------------------------
Windows2003 Sp1
IE6.0 SP1
Flash MX 2004 ...
イベトリスナーについて
お世話になっております。
kirainです。
AS3のaddEventListenerとremoveEventListenerについて質問です。
サンプルとして以下のようなものを作りました。

MCを1つ配置します。(test_mc)
さらに別のMCを2つ用意します。(btn1_mc、btn2_mc)
test_mcにclick動作定義したいのですが、
・btn1_mcを押下したら「test_mcの押下でtrace("A")を実行するようにする」
・btn2_mcを押下したら「test_mcの押下でtrace("B")を実行するようにする」
function xClickHandler1(event:MouseEvent) {
	trace("A");
}
function xClickHandler2(event:MouseEvent) {
	trace("B");
}
function xClickHandler3(event:MouseEvent) {
	test_mc.addEventListener(MouseEvent.CLICK, xClickHandler1);
}
function xClickHandler4(event:MouseEvent) {
	test_mc.addEventListener(MouseEvent.CLICK, xClickHandler2);
}
btn1_mc.addEventListener(MouseEvent.CLICK, xClickHandler3);
btn2_mc.addEventListener(MouseEvent.CLICK, xClickHandler4);

これで、どちらかのボタンを押せば、test_mcの押下でA,またはBが出力されますが、traceは一度だけ機能させたいので、trace後にtest_mcに定義さているリスナーを削除させたいと考えています。
リスナーの削除にはそのリスナーの名前を知る必要がありますが、それを調べる方法はないでしょうか。
btn1_mc、btn2_mcを押下したときにどちらを押下したかを管理するようなオブジェクトを用意しなければできないでしょうか。

※上記サンプルではbtn2_mcまでとなっていますが、実際に扱いたいのはもっと多くリスナーの「xClickHandlerX」という名前もどんどん増えてしまうので、「すべてのリスナを削除」なんてできたら助かるのですが・・・


----------------
Kirarin

ひろゆき
Åê¹ÆNo.38043
投稿日時: 2008-3-15 3:26
ちょんまげら
居住地: 東京砂漠
投稿: 4403
使用環境:
10.8.5

Flash Professional CS4/CS6/CC

Safari 6.1
Re: イベトリスナーについて
よく分かっていませんが。

引用:
リスナーの削除にはそのリスナーの名前を知る必要がありますが、それを調べる方法はないでしょうか。

function xClickHandler1(event:MouseEvent) {
    trace(event.currentTarget);
    trace(event.currentTarget.name);
}
で、取れませんか?

FF071110 - イベントを制する者、ActionScript 3.0を制す - F-siteセミナー


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

野中文雄
Åê¹ÆNo.38048
投稿日時: 2008-3-15 16:28
ちょんまげら
居住地: 東京
投稿: 4531
使用環境:
CS5.5 .6.8 Vista Home Premium (SP1)
Re: イベントリスナーについて
MovieClipインスタンスtest_mcにリスナー関数の参照を、変数として設定しておくことがひとつの方法でしょう。ただ、その呼出された関数自体をイベントリスナーから削除するのでしたら、arguments.calleeプロパティが使えます。
function xClickHandler1(event:MouseEvent) {
	trace("A");
	event.currentTarget.removeEventListener
	(MouseEvent.CLICK, arguments.callee);
}
function xClickHandler2(event:MouseEvent) {
	trace("B");
	event.currentTarget.removeEventListener
	(MouseEvent.CLICK, arguments.callee);
}
function xClickHandler3(event:MouseEvent) {
	test_mc.addEventListener(MouseEvent.CLICK, xClickHandler1);
}
function xClickHandler4(event:MouseEvent) {
	test_mc.addEventListener(MouseEvent.CLICK, xClickHandler2);
}
btn1_mc.addEventListener(MouseEvent.CLICK, xClickHandler3);
btn2_mc.addEventListener(MouseEvent.CLICK, xClickHandler4);

引用:
kirarinさんは書きました:
これで、どちらかのボタンを押せば、test_mcの押下でA,またはBが出力されますが、traceは一度だけ機能させたいので、trace後にtest_mcに定義さているリスナーを削除させたいと考えています。


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

kirarin
Åê¹ÆNo.38070
投稿日時: 2008-3-17 22:38
職人
居住地: 彩の国
投稿: 214
使用環境:
Windows7
IE 8
Flash CS4
Flash Player WIN 10,0,45,2
-------------------------
WindowsXP Professional SP3
IE7.0
Flash 8 Professional
Flash Player 10.0.12.36
-------------------------
Windows2003 Sp1
IE6.0 SP1
Flash MX 2004 ...
Re: イベトリスナーについて
お返事遅くなりました。
ひろゆきさん、ありがとうございます。

xClickHandler1とxClickHandler2に、トレースを追加してみましたが、結果はどちらも以下の通りでした。

trace(event.currentTarget)の結果
[object SimpleButton]

trace(event.currentTarget.name)の結果
test_mc

リスナーを登録したMCの名称をとることができました。
リスナーの削除には、野中さんからアドバスいただきました、arguments.calleeプロパティでできました。

情報ありがとうございました!


----------------
Kirarin

kirarin
Åê¹ÆNo.38071
投稿日時: 2008-3-17 22:45
職人
居住地: 彩の国
投稿: 214
使用環境:
Windows7
IE 8
Flash CS4
Flash Player WIN 10,0,45,2
-------------------------
WindowsXP Professional SP3
IE7.0
Flash 8 Professional
Flash Player 10.0.12.36
-------------------------
Windows2003 Sp1
IE6.0 SP1
Flash MX 2004 ...
Re: イベントリスナーについて
お返事遅くなりました。
野中さん、ありがとうございます。

教えていただいた記述を加えて確認しました。
無事、btn1_mc、btn2_mcでトレース内容を切り替えつつ、またtest_mc1回のクリックでトレースを1回だけ行うことができました!

追加したリスナー関数の名前が分からなくても、event.currentTargetのarguments.calleeで、リスナー削除することができるのですね!
まさにこのようなことがしたかったのです!
ありがとうございましたm(__)m


----------------
Kirarin

スレッド表示 | 新しいものから 前のトピック | 次のトピック | トップ

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