2

当游戏重置但 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();
}
4

3 回答 3

2

您可能没有在正确的位置轮询它。纹理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();

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

于 2012-12-05T08:26:27.107 回答
2

你试过使用Color.White吗?

于 2012-12-05T14:36:47.307 回答
1

在默认配置中,XNA 使用双缓冲。您所有的绘制命令都在发生 - 但结果被绘制到后缓冲区。您需要将其与前端缓冲区交换,以便结果出现在屏幕上。

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

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

其他一些提示:

  • 你可以做相反的事情——并阻止 XNA 自动绘制——通过覆盖BeginDraw并返回 false。或打电话SupressDraw。(或者您可以通过覆盖EndDraw而不调用该base方法来防止交换。)

  • SpriteBatch,默认情况下,将缓冲所有绘图,直到End被调用。之后Present打电话。

于 2012-12-05T14:40:32.133 回答