2013-01-08 50 views
2

我已经在Flash CS6中使用AS3和Air 3.2进行了Android版本的游戏,现在这个游戏你去了不同的菜单,当你死的时候,它会回到主菜单并显示你的分数,现在当你选择一个新的角色并再次玩,怪物的速度翻倍!?!?AS3敌人加倍速度?

任何想法为什么?我可以给你一段我的代码,但我真的不确定问题的哪一部分?它会成为未被删除的事件监听器吗?

这里是调用该函数开始拉平

public function startLevel1(navigationEvent:NavigationEvent):void 
    { 
     //classSelect = null; 
     removeChild(classSelect); 
     levelManager = new LevelManager(heroGra, hero); 
     addChild(levelManager); 
     levelManaOn = true; 

     gameTimer = new Timer(30); 
     //On every 30ms we call apon moveEvent function 
     gameTimer.addEventListener(TimerEvent.TIMER, tick); 
     gameTimer.start(); 

    } 

这里是删除Tick事件,对于怪物

public function tick(timerEvent:TimerEvent):void 
    { 
     if(levelManaOn == true) 
     { 
      levelManager.update(); 
      if(hero.hp <= 0) 
      { 
       trace("DEAD"); 
       onScoreState(); 
       levelManaOn = false; 
       removeEventListener(TimerEvent.TIMER, tick); 
      } 
     } 
    } 

蜱事件调用更新的功能,它会调用这个功能

public function onScoreState():void 
    { 
     scoreState = new ScoreState(); 
     scoreState.waveCompletedScore.text = levelManager.level.score.toString(); 
     // 
     scoreState.addEventListener(NavigationEvent.ENDGAME, backMainMenu); 
     addChild(scoreState); 
     removeChild(levelManager); 
    } 

这个删除了levelManager,但仍然是mon sters以两倍的速度移动,并且每次你在死后从头开始重新开始,速度再次翻倍,并且再次,为什么?

感谢您阅读并帮助

帆布

回答

3
gameTimer = new Timer(30); 
    //On every 30ms we call apon moveEvent function 
    gameTimer.addEventListener(TimerEvent.TIMER, tick); 
    gameTimer.start(); 

我敢打赌,这个代码被没有被删除的第一个计时器再次执行。

您需要致电removeEventListener(TimerEvent.TIMER, tick);作为您的gameTimer对象的方法。就像这样:

gameTimer.removeEventListener(TimerEvent.TIMER, tick);

请务必保持一个参考gameTimer。在删除侦听器之前,还要执行gameTimer.stop();

+0

gameTimer.reset()也适用于不重新创建计时器并使用同一个计时器的情况。将定时器的创建从初始级别移出并在那里启动。 – Gone3d

+1

干杯队友,它现在正常工作:),嗯,这是很好也知道我是在正确的轨道上:) – Canvas