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