我使用 AS3 和 Air 3.2 for Android 在 flash CS6 中制作了一个游戏,现在这个游戏你会进入不同的菜单,当你死后,它会返回主菜单并显示你的分数,现在当你选择一个新的角色再次通关,怪物速度加倍!?!?
知道为什么吗?我可以给你一段代码,但我真的不确定问题出在哪一部分?会是一个没有被删除的事件监听器吗?
这是被调用来启动关卡的函数
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 );
}
}
}
从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,但怪物仍然以双倍的速度移动,每次你死后从头开始时,速度都会再次加倍,知道为什么吗?
感谢您的阅读和帮助
Canvas
最佳答案
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();
。
关于actionscript-3 - AS3敌人双倍速度?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14224044/