Таймер в действии Сценарий 3 - PullRequest
2 голосов
/ 18 апреля 2011

У меня проблема с тем, что мне нужно создать таймер, но я хочу передать ему переменную, как это сделать? Возможно ли это в AS3?

Я пытался так:

            bonusPlayer1Timer = new Timer(5000);
            bonusPlayer1Timer.addEventListener(TimerEvent.TIMER, bonusChanges(player1));
            bonusPlayer1Timer.addEventListener(TimerEvent.TIMER_COMPLETE, bonusChangesRemove(player1));
            bonusPlayer1Timer.start();

function bonusChanges(event:TimerEvent, playerBonus:Player):void {
    switch (playerBonus.bonus) {
        case 0 :
            playerBonus.multipleShooting = false;
            playerBonus.bonus = -1;
            break;
...}}

Но у меня есть ошибка:

1067: Implicit coercion of a value of type Player to an unrelated type flash.events:TimerEvent.
1136: Incorrect number of arguments.  Expected 2.

И эта ошибка выделена жирной линией.

Могу ли я использовать это таким образом? Или я должен создать две одинаковые функции для каждого из моих игроков, потому что мне не разрешено передавать какие-либо другие аргументы функции таймера?

Спасибо,

Ответы [ 4 ]

8 голосов
/ 18 апреля 2011

Создайте класс, расширяющий класс Timer, и добавьте свойство для Player.

public class PlayerTimer extends Timer
{
    public var thePlayer:Player;

    public function PlayerTimer(delay:Number, repeatCount:int=0)
    {
        super(delay, repeatCount);
    }       
}

Используя ваш пример, код будет выглядеть примерно так:

bonusPlayer1Timer = new PlayerTimer(5000);
bonusPlayer1Timer.thePlayer = new Player();
bonusPlayer1Timer.addEventListener(TimerEvent.TIMER, bonusChanges);
bonusPlayer1Timer.addEventListener(TimerEvent.TIMER_COMPLETE, bonusChangesRemove);
bonusPlayer1Timer.start();

function bonusChanges(event:TimerEvent):void {
    var playerBonus:Player = PlayerTimer(event.target).thePlayer; 
    switch (playerBonus.bonus) {
        case 0 :
            playerBonus.multipleShooting = false;
            playerBonus.bonus = -1;
            break;
...}}
2 голосов
/ 18 апреля 2011

Вы можете никогда передавать более одного аргумента в функцию, запускаемую EventListener.Вам нужно найти другие способы передачи вашей информации, например решение, предоставленное Натаном Смитом.

0 голосов
/ 23 декабря 2012

Просто введите var bonusPlayer1Timer = новый таймер (5000);

0 голосов
/ 11 ноября 2012

Вы также можете сделать это следующим образом:

var x = setTimeout(yourfunction(/*arguments you need*/),1000);
function yourfunction(/*var*/){
    //your code
}
...