嗯,这很有趣——至少对我来说,在我的无知中。让代码说话:
public function textSfx(chPos:int, otlPos:int):void
{
var sfxTimer:Timer = new Timer (100, 12);
trace("statSfx fired");
this["textCh" + chPos + "Stat"].text = this["otl" + otlPos + "Type"] + ": " + this["endOtl" + otlPos + "Stat"];
sfxTimer.addEventListener(TimerEvent.TIMER, textSfxHandler(chPos, sfxTimer));
sfxTimer.start();
}
public function textSfxHandler(chPos:int, sfxTimer:Timer):Function
{
return function(evt:TimerEvent):void
{
trace(this["anything"]);
}
}
请注意,这里只有 textSfxHandler 有针对性,其余的仅供参考,希望能更好地理解它。注意在返回函数中 this[] 的使用:无论您通过它引用什么,它都将跟踪为未定义。
为什么这样?是因为 this[] 不能在 return 部分中使用,还是因为 return 是一个函数?我已经做了一个解决方法(一个丑陋的解决方法,涉及通过返回调用另一个函数,我可以使 this[] 工作),但我想知道原因是什么。
同样,计时器在函数中被实例化,因为我需要大量不同的彼此独立运行,而不是一个计时器来管理它。
有点像给种族的戒指,而不是一戒——尽管你可能会说一戒仍然控制着其他戒指,但让我们在那之前停下来。