SpriteBatch没有绘制到屏幕

时间:2012-12-05 03:50:27

标签: xna spritebatch

我正在尝试在游戏重置时向屏幕绘制一个快速加载精灵,但spritebatch没有绘制。我在 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();
}

3 个答案:

答案 0 :(得分:2)

您可能没有在正确的地方进行投票。纹理重置(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();

这需要不断进行轮询,否则只会渲染几毫秒,之后您将无法看到它。将渲染代码放在渲染方法中,它应该可以正常工作。

答案 1 :(得分:2)

您是否尝试过使用Color.White

答案 2 :(得分:1)

在默认配置中,XNA使用双缓冲。你的所有绘图命令都在发生 - 但结果被吸引到后台缓冲区。您需要将它与前缓冲区交换,以便结果显示在屏幕上。

通常这是为你完成的。游戏将循环调用UpdateBeginDrawDrawEndDraw(这些是Game中可以在您自己的游戏类中覆盖的方法) 。 EndDraw的默认实现将调用GraphicsDevice.Present,它将交换缓冲区。

我得到的印象是,作为一个加载屏幕,你在主游戏循环之外的某个地方画画。您可以自己拨打GraphicsDevice.Present以翻转缓冲区。

其他一些提示:

  • 您可以通过覆盖BeginDraw并返回false来完成相反的操作 - 并防止XNA自动绘制。或者致电SupressDraw。 (或者您可以通过覆盖EndDraw而不是调用base方法来阻止交换。)

  • 默认情况下,
  • SpriteBatch会缓冲所有绘图,直到调用End为止。之后再进行Present来电。