gpt4 book ai didi

actionscript-3 - AS3敌人倍速?

转载 作者:行者123 更新时间:2023-12-04 05:16:16 26 4
gpt4 key购买 nike

我在 Flash CS6 中使用 AS3 和 Air 3.2 for Android 制作了一个游戏,现在这个游戏你进入不同的菜单,当你死时,它会回到主菜单并显示你的分数,现在当你选择一个新角色并玩时再次通过,怪物速度翻倍!?!?

知道为什么吗?我可以给你一段我的代码,但我真的不确定问题出在哪一部分?它会是一个没有被删除的事件监听器吗?

这是被调用来启动关卡的函数

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();

}

这是被删除的为怪物调用更新函数的滴答事件
    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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com