1

テキストを表示する textField があり、タイマーが切れると、次のテキストが表示されます。または、タイマーを待つ代わりに、キーを押して次のテキストを表示することもできます。

var dispatchString:String;

function dispatchIt():void {
    dispatchEvent(new Event(dispatchString));
}

stage.addEventListener(KeyboardEvent.KEY_DOWN,dispatchIt);


function text1():void {
    dispatchString = "text2";
    addEventListener("text2",text2);
    ...
    dispatchIt(); //when timer goes off

}
function text2(evt:Event):void {
    removeEventListener("text2",text2);
    dispatchString = "text3";
    addEventListener("text3",text3);
    ...
    dispatchIt();
}

私は、dispatchString と addEventListener を設定する部分を簡素化しようとしています。代わりに、両方を実行する 1 つのパラメーターで関数を呼び出します。次のようなものです:

function listenFor(s:String):void {
    dispatchString = s;
    addEventListener(s,this[s]);
}

ただし、ネストされた関数では機能しません。代わりに関数を渡し、dispatchString をその関数の名前に設定する別の方法があるのではないかと考えていましたが、うまくいきませんでした。他のアイデアはありますか?

4

1 に答える 1

1

イベントの文字列を設定する代わりに、イベント ハンドラを設定してみませんか?

私は次のことを試します:

var eventHandler:Function = text1;

function dispatchIt(evt:Event):void {
    callLater(eventHandler,[evt]);
}

stage.addEventListener(KeyboardEvent.KEY_DOWN,dispatchIt);


function text1(evt:Event):void {
    eventHandler = text2;
    trace("text1");
    ...
    dispatchIt(evt); //when timer goes off

}
function text2(evt:Event):void {
    eventHandler = text3;
    trace("text2");
    ...
    dispatchIt(evt);
}

function text3(evt:Event):void {
    eventHandler = text1;
    trace("text3");
    ...
    dispatchIt(evt);
}
于 2013-11-13T15:34:38.797 に答える