2

我在 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,但怪物仍然以两倍的速度移动,并且每次你死后从头开始重新启动时,速度又是一倍,又是一倍,知道为什么吗?

感谢您的阅读和帮助

帆布

4

1 回答 1

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();在删除侦听器之前也要这样做。

于 2013-01-08T21:12:23.267 回答