AS3:函数字符串||函数到字符串

时间:2013-11-13 10:53:29

标签: actionscript-3

我有一个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设置为该函数的名称,但我没有太多运气。还有其他想法吗?

1 个答案:

答案 0 :(得分: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);
}