计时器在动作脚本3中

can*_*nim 2 actionscript actionscript-3 flash-cs3

我有问题,我需要创建计时器,但我想传递一个变量,如何做到这一点?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;
...}}
Run Code Online (Sandbox Code Playgroud)

但我有错误:

1067: Implicit coercion of a value of type Player to an unrelated type flash.events:TimerEvent.
1136: Incorrect number of arguments.  Expected 2.
Run Code Online (Sandbox Code Playgroud)

而这个错误是粗线.

我可以这样使用它吗?或者我必须为每个玩家创建两个相同的函数,因为我不允许传递任何不同的参数来定时器函数?

谢谢,

Nat*_*ith 8

创建一个扩展Timer类的类,并为Player添加一个属性.

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

    public function PlayerTimer(delay:Number, repeatCount:int=0)
    {
        super(delay, repeatCount);
    }       
}
Run Code Online (Sandbox Code Playgroud)

使用您的示例代码将是这样的:

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;
...}}
Run Code Online (Sandbox Code Playgroud)