2

XNA でゲームを作成していますが、ゲームを開始するとメニューがポップアップ表示されます。「スペース」を押すと、ゲーム自体が開始されます。これを行うために、3 つの異なるケースで gamestate スイッチを使用しています。最後の状態(ゲームオーバー画面)になって「スペース」を押してゲームを再開したいのですが、「スペース」を押し続けないと機能しません。

だから基本的に。ゲームはメニュー画面からスタート。スペースを押すと、ゲーム自体が開始されます。何かにぶつかって死ぬとゲームオーバー画面に。スペースを押したときにゲームの実行に戻ることができるようにしたいのですが、これは機能しません(スペースを押したままにしない限り)

PS: 必要に応じて、さらにコードを追加したいと考えています。前もって感謝します!

これが私の更新コードです:

const int introMenu = 0, gameRunning = 1, gameOver = 2;
switch (gameState)
         {
          case introMenu:
          if (ks.IsKeyDown(Keys.Space))
           {
             gameState = gameRunning;
           }
                break;
            case gameRunning:
                if(colliding)
                {
                        gameState = gameOver;
                }
                break;
            case gameOver:
                if (ks.IsKeyDown(Keys.Space))
                {
                    gameState = gameRunning;     //NOT WORKING!
                }
                break;
        }

ここに私の描画コードがあります:

        GraphicsDevice.Clear(Color.CornflowerBlue);

        spriteBatch.Begin();
            switch (gameState) 
       {
        case introMenu:
        background.Draw(spriteBatch);  
        break;
            case gameRunning:
                //draw the player, new background and everything nessecary
                break;
            case gameOver:
                //draw new gameover background
                break;
        }
        spriteBatch.End();

        base.Draw(gameTime);
4

2 に答える 2

4

今、私は正確な答えを思い付くのに十分ではありませんが、私が推測した場合、あなたのcolliding状態は真のままであり、ゲーム状態はちょうど戻ります。

コメントで述べたように、デバッガーを使用して、これが実際に当てはまるかどうかを確認できます。

また、ゲーム変数を元の状態に再初期化することも期待しているので、ゲームを最初からやり直すと、初めてゲームを開始したかのようになります(衝突が正しくないことを確認してください)。

于 2012-10-30T19:58:34.760 に答える
2

上記の答えとコメントは完全に正しいです。この個々の問題を修正するには、コードを次のように変更するだけです。

if(colliding)
{
     colliding = false;  
     gameState = gameOver;
}

衝突がまだ真であるため、ゲーム状態が実行に切り替わった後、スペースバーを押すとすぐにゲームオーバー画面に戻るため、問題が発生しています。

于 2012-10-30T20:07:12.547 に答える