2011-04-18 93 views
2

我有问题,我需要创建计时器,但我想传递给它一个变量,如何做到这一点?在AS3中可能吗?计时器在行动脚本3

我想是这样的:

  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. 

而这个错误在粗线。

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

谢谢

回答

8

创建扩展Timer类的类,添加属性的球员。使用

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; 
...}} 
+0

非常好的队友刚刚为我解锁了一些知识。扩展你感兴趣的课程并允许它附加一个自定义课程。所以event.target引用刚刚触发事件的Timer对象,对吧? – Alex 2011-04-18 04:24:19

+0

@AlexW你是 – 2011-04-18 04:27:36

+0

是的谢谢!我会这样做!万分感谢! – canimbenim 2011-04-18 08:39:38

2

您可以从未通多个参数成一个事件侦听触发的功能。您需要找到其他方式传递您的信息,例如Nathan Smith提供的解决方案。

0

你也可以这样来做:

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

sry在这个博客新的问题与评论thx阿迪lester一些问题 – 2012-11-10 22:24:53

0

只需键入 VAR bonusPlayer1Timer =新的Timer(5000);