手动控制何时重绘屏幕

时间:2010-10-29 18:51:49

标签: c# xna xbox360 xna-4.0

我正在尝试为XNA制作一个基于回合制的roguelike引擎。我基本上是使用一个名为libtcod的基于SDL的roguelike库完成之前的工作来移植游戏。如何修改基本的XNA模板,使游戏每帧重绘一次屏幕,而是在我想要的时候?

2 个答案:

答案 0 :(得分:5)

执行此操作的正确方法是,只要您想将后缓冲区绘制到屏幕上,就可以调用GraphicsDevice.Present()

现在困难在于Game类会自动为您调用Present(特别是在Game.EndDraw中),这是您不希望它做的事情。幸运的是Game提供了许多方法来阻止调用Present:

最好的方法是覆盖BeginDraw并让它返回false,以防止绘制框架(包括阻止调用DrawEndDraw),如下所示:

protected override bool BeginDraw()
{
    if(readyToDraw)
        return base.BeginDraw();
    else
        return false;
}

其他选择是调用Game.SuppressDraw,或覆盖EndDraw,以便在您准备好在屏幕上显示框架之前不会调用base.EndDraw()

就个人而言,我只想画每一帧。

答案 1 :(得分:2)

您不需要从Game类继承,它完全是可选的。您可以编写自己的类,只在您需要时重绘屏幕。虽然这个类中有一些有用的代码,所以你可以使用Reflector从那里复制代码,然后改变它的逻辑。