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));“
为什么表现如此?当然,我可能会找到另一种方法让它等待一秒钟并产卵,但这种方式在我看来是最自然的方式。 谢谢你的时间。
答案 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);
省略你在函数引用中传递的()和参数。