2

Android用のAS3とAir 3.2を使用してフラッシュCS6でゲームを作成しました。このゲームでは、別のメニューに移動し、死ぬとメインメニューに戻ってスコアが表示され、新しいキャラクターを選択してプレイするとスコアが表示されますモンスターの速度が2倍に!?!?

理由はありますか?コードの一部を提供できますが、どの部分が問題なのか本当にわかりませんか? 削除されなかったのはイベントリスナーでしょうか?

レベルオフを開始するために呼び出される関数は次のとおりです

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

ティックイベントから、この関数を呼び出します

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

これにより levelManager が削除されますが、それでもモンスターは 2 倍の速度で移動し、死亡後に最初からやり直すたびに、速度が再び 2 倍になります。

読んでくれてありがとう

キャンバス

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 に答える