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 的部分,而是使用一个参数来调用两者。所以像:

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 回答