2015-09-23 3 views
0

в основном, у меня есть функция, называемая setEnemies, это порождает множество врагов я решаю так:AS3 - Передача функции с переменной через таймер

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
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); 

Опуская() и аргументы, которые вы передаете в ссылке на функцию.

+0

Это работает, но я получаю странное предупреждение: Предупреждение: возвращаемое значение для функции «анонимный» не имеет объявления типа. – RunningFromShia

+0

Попробуйте положить «: void» после функции() для анонимной функции. – etchesketch

+0

Вам также нужен аргумент события: 'function (e: TimerEvent): void {}' – Aaron

Смежные вопросы