メイン ActionScript 3.0 特設会議室
eventDispatcherの使い方について | 投稿するにはまず登録を |
| スレッド表示 | 新しいものから | 前のトピック | 次のトピック | 下へ |
| 投稿者 | スレッド |
|---|---|
| kemumaki12 | Åê¹ÆNo.40460 投稿日時: 2008-10-8 17:13 |
新米 ![]() ![]() 居住地: 兵庫県 投稿: 5
使用環境:
|
eventDispatcherの使い方について dispatchEventの使い方で頭を抱えています。
単純に一つのドキュメントクラス上から、 EventDispatcherを継承しているクラスのインスタンスを作成して、 そのインスタンスからイベント発動して、 ドキュメントクラス内のリスナーで受信というテストをしようとしています。 エラーも何も表示されないのですが、 traceの文言がリスナー側で出力されません。 イベントの受け渡しがうまくいっていないのでしょうか。 ------------------------------- ドキュメントクラス package { import flash.events.Event; import flash.display.MovieClip; public class EventCheck extends MovieClip { var myEventObj:MyEvent; function EventCheck() { myEventObj = new MyEvent(); //イベントリスナーに登録 myEventObj.addEventListener(MyEvent.EVENT_OK,onEventA); } //以下が表示されない function onEventA(event:Event):void { trace("イベント受信・発動成功"); } } } ------------------------------ eventDispatcher継承クラスのmyEventクラス package { import flash.events.EventDispatcher; import flash.events.Event; public class MyEvent extends EventDispatcher { //カスタムイベント名 public static const EVENT_OK:String="event_ok"; //コンストラクタ function MyEvent() { eventFind(); } //イベント送信 function eventFind():void { dispatchEvent(new Event(MyEvent.EVENT_OK)); } } } |
| Yasuhiko Nishimura | Åê¹ÆNo.40461 投稿日時: 2008-10-8 17:58 |
新米 ![]() ![]() 居住地: 投稿: 6
使用環境:
10.4.11![]() ![]() |
Re: eventDispatcherの使い方について それぞれの処理がどういう順番で実行されているかを確認するとわかりますが、
myEventObj = new MyEvent(); が実行された段階で、 MyEventのコンストラクタ内で、eventFindが実行されます。 この段階ではまだイベントリスナーは登録されていないので、 EventCheckはイベントを受け取れません。 その後、 myEventObj.addEventListener(MyEvent.EVENT_OK,onEventA); が実行された段階で登録されます。 この後で、 myEventObj.eventFind(); というふうに呼び出してあげると、traceされるようです。 引用:
|
| kemumaki12 | Åê¹ÆNo.40463 投稿日時: 2008-10-8 18:56 |
新米 ![]() ![]() 居住地: 兵庫県 投稿: 5
使用環境:
|
Re: eventDispatcherの使い方について 早速のご回答ありがとうございます。
おっしゃるとおり、 Timerイベントで少しずらしてから、 eventFindを発動するようにしてみると、 きちんと受信することができました。 私の使ったやり方はTimerで無理やりずらすというものですが、 表記の順番かなと思い、いろいろ順番を変えていますが、 それだとうまくできません。 Timerを使わずに並び替えて実行する方法はないでしょうか。 |
| Yasuhiko Nishimura | Åê¹ÆNo.40465 投稿日時: 2008-10-8 22:30 |
新米 ![]() ![]() 居住地: 投稿: 6
使用環境:
10.4.11![]() ![]() |
Re: eventDispatcherの使い方について ・MyEventのコンストラクタにEventCheckへの参照を渡し、コンストラクタ内で、イベントリスナーを登録する方法
など、やり方としてはいろいろあるかもしれませんが、 コンストラクタ内でイベントを発行しなければいけないという状況を一度考えたほうがいいかもしれません。 MyEvent.EVENT_OKが、 コンストラクタの最後で必ず発行される (コンストラクタの後で必ず何らかの処理をしなければいけない) ならば、 myEventObj = new MyEvent(); の次の行に必要な処理を書けばいいでしょう。 また、コンストラクタ内の処理によって、 発行される場合とされない場合がある (コンストラクタの結果によっては何らかの処理をしなければいけない) ならば、myEventObjの状態を見てに応じて必要な処理を書けばよいでしょう。 見当違いのことを言っていたらすいません。 具体的にどういう処理をしたいのかを書いていただけると、 もう少し的確なアドバイスが出来るかもしれません。 |
| 野中文雄 | Åê¹ÆNo.40467 投稿日時: 2008-10-9 1:08 |
ちょんまげら ![]() ![]() 居住地: 東京 投稿: 4531
使用環境:
CS5.5 .6.8 Vista Home Premium (SP1) |
Re: eventDispatcherの使い方について
|
| kemumaki12 | Åê¹ÆNo.40468 投稿日時: 2008-10-9 2:29 |
新米 ![]() ![]() 居住地: 兵庫県 投稿: 5
使用環境:
|
Re: eventDispatcherの使い方について yassuyさま
非常に抽象的な質問だったにも関わらず、 的確なご回答ありがとうございました! まさしくピンポイントで分からなかった部分が分かりました。 下記ご説明部分で、意味が分かりました。 >コンストラクタの最後で必ず発行される >(コンストラクタの後で必ず何らかの処理をしなければいけない) >ならば、 >myEventObj = new MyEvent(); >の次の行に必要な処理を書けばいいでしょう。 今回の質問は可能な限りシンプルに、dispatchEventを使って、イベントの送受信をやり取りしてみることが目的でした。 僕の中でかなりシンプルにしたつもりでしたが、ちょっと意味不明なコードになっていました、、、すみません。 (敢えてコンストラクタで処理してみようと思い立ち、このようなコードで混乱しておりました) ポカンと理解が抜けていた部分がこれで、 なんとなく見えたような気がします。 ありがとうございました! |
| スレッド表示 | 新しいものから | 前のトピック | 次のトピック | トップ |
| 投稿するにはまず登録を | |



ログイン


10.4.11




