对于我游戏中的菜单,我将它们绘制到屏幕上一次,然后仅在它们被认为是脏的时候才重新绘制。每当用户执行应该导致重绘的操作时,这通过设置为 true 的布尔值来处理,然后绘图循环将在绘制菜单之前检查该值。此逻辑在 3.1 中完美运行,但在 4.0 中,菜单会闪烁(绘制 1 帧)然后显示紫色屏幕,直到再次绘制。
我在 4.0 中创建了一个非常简单的测试游戏来演示如下所示的问题。您会注意到屏幕看起来只是紫色。如果将行设置 _isDirty 删除为 false,您将看到矢车菊蓝色背景。
public class Game1 : Microsoft.Xna.Framework.Game
{
GraphicsDeviceManager graphics;
bool _isDirty = true;
public Game1()
{
graphics = new GraphicsDeviceManager(this);
}
protected override void Draw(GameTime gameTime)
{
if (_isDirty)
{
GraphicsDevice.Clear(Color.CornflowerBlue);
_isDirty = false;
}
base.Draw(gameTime);
}
}
我将如何从 XNA 3.1 中获取行为?我见过几个人提到 PreserveContents,但这似乎在 4.0 中没有任何影响,除非我应用不正确。