我正在尝试为 XNA 制作一个基于回合制的 Roguelike 引擎。我基本上是从我之前使用名为 libtcod 的基于 SDL 的 roguelike 库所做的工作中移植游戏。如何修改基本的 XNA 模板以使游戏不是每帧都重绘屏幕,而是在我想要的时候重绘屏幕?
问问题
1416 次
2 回答
5
执行此操作的正确方法是GraphicsDevice.Present()
在您想将后台缓冲区绘制到屏幕上时调用。
现在这里的困难在于Game
该类会自动为您调用 Present(特别是在 中Game.EndDraw
),这是您不希望它做的事情。幸运的是Game
,提供了多种方法来防止 Present 被调用:
最好的方法是覆盖BeginDraw
并让它返回 false,以防止绘制框架(包括防止Draw
和EndDraw
调用),如下所示:
protected override bool BeginDraw()
{
if(readyToDraw)
return base.BeginDraw();
else
return false;
}
其他替代方法是调用Game.SuppressDraw
,或覆盖,使其在您准备好在屏幕上显示框架之前EndDraw
不会调用。base.EndDraw()
就个人而言,我会简单地绘制每一帧。
于 2010-10-30T03:55:57.290 回答
2
您不需要从 Game 类继承,它完全是可选的。您可以编写自己的类,仅在需要时重绘屏幕。不过,该类中有一些有用的代码,因此您可以使用 Reflector 从那里复制代码,然后更改其逻辑。
于 2010-10-30T13:03:19.790 回答