2

ゲームがリセットされたときに画面にクイックロードスプライトを描画しようとしていますが、スプライトバッチが描画されていません。game.spritebatch.begin();にブレークポイントを設定しました。そして、私が一歩踏み出すと、何も描かれません。何か案は?

これが私のリセット機能です

public void Reset()
{
    loadingScreen = game.Content.Load<Texture2D>("Textures\\loadingScreen");
    game.spriteBatch.Begin();
    game.spriteBatch.Draw(loadingScreen, Vector2.Zero, null, Color.Black, 0.0f, Vector2.Zero, 0.5f, SpriteEffects.None, 0f);
    game.spriteBatch.End();
    cameraPosition = original_cameraPosition;
    players.Clear();
    furthest = 0;
    enemies.Clear();
    LoadEnemies();
    ActivatePlayers();
}
4

3 に答える 3

2

おそらく正しい場所でポーリングしていません。テクスチャreset(loadingScreen = game.Content.Load<Texture2D>("Textures\\loadingScreen")は1回だけ実行する必要があります。そうしないと、大量のリソースが無駄になります。

一方、レンダリングコード:

    game.spriteBatch.Begin();
    game.spriteBatch.Draw(loadingScreen, Vector2.Zero, null, Color.Black, 0.0f, Vector2.Zero, 0.5f, SpriteEffects.None, 0f);
    game.spriteBatch.End();

これは継続的にポーリングする必要があります。そうしないと、数ミリ秒間しかレンダリングされず、その後は表示されなくなります。レンダリングコードをレンダリングメソッドに入れると、問題なく動作するはずです。

于 2012-12-05T08:26:27.107 に答える
2

使ってみましたColor.Whiteか?

于 2012-12-05T14:36:47.307 に答える
1

デフォルト設定では、XNAはダブルバッファリングを使用します。すべての描画コマンドが実行されていますが、結果はバックバッファーに描画されています。結果が画面に表示されるように、フロントバッファと交換する必要があります。

通常、これはあなたのために行われます。UpdateゲームはループでBeginDraw、、、Drawを呼び出しEndDrawます(これらはGame、独自のゲームクラスでオーバーライドできるメソッドです)。のデフォルトの実装は、バッファを交換するEndDrawを呼び出します。GraphicsDevice.Present

ロード画面なので、メインのゲームループの外側のどこかにこれを描いているような印象を受けます。GraphicsDevice.Presentバッファを反転するために自分自身を呼び出すことができます。

その他のヒント:

  • BeginDrawfalseをオーバーライドして返すことにより、基本的に反対のことを行うことができ、XNAが自動的に描画されないようにすることができます。または呼び出しSupressDrawます。EndDraw(または、メソッドをオーバーライドせずにオーバーライドすることで、スワップを防ぐことができますbase。)

  • SpriteBatch、デフォルトでは、Endが呼び出されるまですべての描画をバッファリングします。その後、電話をかけてくださいPresent

于 2012-12-05T14:40:32.133 に答える