C# 手动控制何时重新绘制屏幕
我想为XNA做一个基于旋转的类似roguelike的引擎。我基本上是将游戏移植到以前使用基于SDL的类似roguelike的库libtcod的工作中。如何修改基本XNA模板,使游戏不必在每一帧重新绘制屏幕,而是在我需要的时候重新绘制屏幕?正确的方法是在需要将后缓冲区绘制到屏幕上时调用C# 手动控制何时重新绘制屏幕,c#,xna,xbox360,xna-4.0,C#,Xna,Xbox360,Xna 4.0,我想为XNA做一个基于旋转的类似roguelike的引擎。我基本上是将游戏移植到以前使用基于SDL的类似roguelike的库libtcod的工作中。如何修改基本XNA模板,使游戏不必在每一帧重新绘制屏幕,而是在我需要的时候重新绘制屏幕?正确的方法是在需要将后缓冲区绘制到屏幕上时调用GraphicsDevice.Present() 现在这里的困难在于Game类自动为您调用Present(特别是在Game.EndDraw中),这是您不希望它做的事情。幸运的是,Game提供了许多防止调用Presen
GraphicsDevice.Present()
现在这里的困难在于Game
类自动为您调用Present(特别是在Game.EndDraw
中),这是您不希望它做的事情。幸运的是,Game
提供了许多防止调用Present的方法:
最好的方法是重写BeginDraw
并使其返回false,以防止绘制帧(包括防止调用Draw
和EndDraw
),如下所示:
protected override bool BeginDraw()
{
if(readyToDraw)
return base.BeginDraw();
else
return false;
}
其他替代方法是调用或覆盖EndDraw
,这样它在准备在屏幕上显示帧之前不会调用base.EndDraw()
就我个人而言,我只需绘制每一帧。您不需要从Game类继承,它是完全可选的。您可以编写自己的类,该类仅在需要时重新绘制屏幕。不过,类中有一些有用的代码,因此您可以使用Reflector从中复制代码,然后更改其逻辑。为什么要这样做?真的,我很好奇。嗯,当你有一个游戏,它的图形直到用户按下一个键才改变时,一遍又一遍地重新计算和重新绘制似乎有点傻。