AS3 - 通过计时器传递带变量的函数

时间:2015-09-23 14:52:14

标签: function actionscript-3 timer

基本上,我有一个名为setEnemies的函数,它会产生我决定的敌人数量:

public function Main()
{
setEnemies(3);          
}

这是setEnemies:

private function setEnemies(numbers:Number):void
{
        for (var i:int = 0; numbers > i; i++)
        {
        _Enemy = new Enemy(_player.x, _player.y);       
        addChild(_Enemy);
        addChild(_Enemy.rocket); // add enemy rocket to stage   
        _Enemy.isAlive = true;
        enemies.push(_Enemy);

        }

}

到目前为止它的确有效。

好吧,当敌人死亡时,我希望游戏等待1秒然后再产生1个敌人,就像这样:

var spawnTimer:Timer; // Spawn enemy timer.
spawnTimer = new Timer(1000, 1); 
spawnTimer.addEventListener(TimerEvent.TIMER, setEnemies(1));
spawnTimer.start();

但是我收到以下错误:

“将void类型的值隐式强制转换为不相关的类型函数。 spawnTimer.addEventListener(TimerEvent.TIMER,setEnemies(1));“

为什么表现如此?当然,我可能会找到另一种方法让它等待一秒钟并产卵,但这种方式在我看来是最自然的方式。 谢谢你的时间。

1 个答案:

答案 0 :(得分:0)

spawnTimer.addEventListener(TimerEvent.TIMER, setEnemies(1));

我认为这些问题是addEventListener的第二个参数。该函数正在寻找要侦听的事件(TimerEvent.TIMER)和一个函数。你传入了setEnemies(1),它将调用该函数,然后传入该函数返回的任何内容作为第二个参数 - 而不是实际的函数本身。

我认为你想要做的是:

spawnTimer.addEventListener(TimerEvent.TIMER, function(e:TimerEvent):void{
    setEnemies(1);
});

这会创建并传入一个匿名函数,以便触发事件。

另外,如果你想要传递一个你已经做过的函数,只是为了将来的参考,你必须像上面那样包装一个函数,或者只输入名称,如:

spawnTimer.addEventListener(TimerEvent.TIMER, setEnemies);

省略你在函数引用中传递的()和参数。