我正在尝试在游戏重置时向屏幕绘制一个快速加载精灵,但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();
}
答案 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使用双缓冲。你的所有绘图命令都在发生 - 但结果被吸引到后台缓冲区。您需要将它与前缓冲区交换,以便结果显示在屏幕上。
通常这是为你完成的。游戏将循环调用Update
,BeginDraw
,Draw
,EndDraw
(这些是Game
中可以在您自己的游戏类中覆盖的方法) 。 EndDraw
的默认实现将调用GraphicsDevice.Present
,它将交换缓冲区。
我得到的印象是,作为一个加载屏幕,你在主游戏循环之外的某个地方画画。您可以自己拨打GraphicsDevice.Present
以翻转缓冲区。
其他一些提示:
您可以通过覆盖BeginDraw
并返回false来完成相反的操作 - 并防止XNA自动绘制。或者致电SupressDraw
。 (或者您可以通过覆盖EndDraw
而不是调用base
方法来阻止交换。)
SpriteBatch
会缓冲所有绘图,直到调用End
为止。之后再进行Present
来电。