AS3敌人双倍速度?

时间:2013-01-08 21:07:58

标签: actionscript-3 flash air

我使用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,但是怪物的移动速度仍然是两倍,每次你在死亡后从头开始重启,速度再次加倍,再次,任何想法为什么?

感谢您的阅读和帮助

帆布

1 个答案:

答案 0 :(得分: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();