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

パスワード:


パスワード紛失

新規登録
メインメニュー
メイン
   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さんは書きました:
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));
}
}
}
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 = new MyEvent();
doSomething();


また、コンストラクタ内の処理によって、
発行される場合とされない場合がある
(コンストラクタの結果によっては何らかの処理をしなければいけない)
ならば、myEventObjの状態を見てに応じて必要な処理を書けばよいでしょう。
myEventObj = new MyEvent();
if(myEventObj.flag) doSomething();


見当違いのことを言っていたらすいません。
具体的にどういう処理をしたいのかを書いていただけると、
もう少し的確なアドバイスが出来るかもしれません。
野中文雄
Åê¹ÆNo.40467
投稿日時: 2008-10-9 1:08
ちょんまげら
居住地: 東京
投稿: 4531
使用環境:
CS5.5 .6.8 Vista Home Premium (SP1)
Re: eventDispatcherの使い方について
率直に申し上げて、何がされたいのでしょう?ご質問の内容は、「電話に向かってしゃべってから、番号を掛けたら相手に伝わりません」というのと同じです。相手が電話に出てから話さなければ、伝わらないのは当然ではありませんか?
引用:
kemumaki12さんは書きました:
私の使ったやり方はTimerで無理やりずらすというものですが、
表記の順番かなと思い、いろいろ順番を変えていますが、
それだとうまくできません。


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

kemumaki12
Åê¹ÆNo.40468
投稿日時: 2008-10-9 2:29
新米
居住地: 兵庫県
投稿: 5
使用環境:
Re: eventDispatcherの使い方について
yassuyさま

非常に抽象的な質問だったにも関わらず、
的確なご回答ありがとうございました!
まさしくピンポイントで分からなかった部分が分かりました。

下記ご説明部分で、意味が分かりました。

>コンストラクタの最後で必ず発行される
>(コンストラクタの後で必ず何らかの処理をしなければいけない)
>ならば、
>myEventObj = new MyEvent();
>の次の行に必要な処理を書けばいいでしょう。

今回の質問は可能な限りシンプルに、dispatchEventを使って、イベントの送受信をやり取りしてみることが目的でした。
僕の中でかなりシンプルにしたつもりでしたが、ちょっと意味不明なコードになっていました、、、すみません。
(敢えてコンストラクタで処理してみようと思い立ち、このようなコードで混乱しておりました)

ポカンと理解が抜けていた部分がこれで、
なんとなく見えたような気がします。

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

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