将图纸与XNA中的更新分开

时间:2014-01-05 00:44:41

标签: c# xna

所以,我正在为我的学校上课做一个XNA游戏。我想将更新速率设置为每秒30次,这是我在游戏类中使用this.TargetElapsedTime = TimeSpan.FromSeconds(1.0 / 30.0);完成的。但是,这也将帧速率限制为30fps。我已经设置了我的绘图,以便它插入所绘制的所有内容的位置和旋转,这样它可以在每次更新时绘制多次并平滑更新之间的值。如何告诉游戏解锁帧速率,但仍保持更新速率为每秒30次更新?

1 个答案:

答案 0 :(得分:1)

听起来你在Draw循环中进行更新逻辑(位置和旋转插值),但Draw循环并不关心;它所知道的是没有调用Game.Update,因此它不必费心绘制/重绘任何内容。

而不是像以下那样设置TargetElapsedTime:在Update循环中,手动跟踪自上次更新以来经过的时间,以确定是否要运行更新代码。

这是一些代码,以防有助于查看。 (抱歉格式化问题)

  1. 不要设置Game.TargetElapsedTime。
  2. 在构造函数中使用TimeSpan.FromSeconds(1.0 / 30.0)实例化新的GameTimer
  3. 指定一个事件处理程序来处理GameTimer.Tick事件。您的插值逻辑可以在Game.Update中,但任何其他更新逻辑都可以在Tick事件处理程序中抛出,以便它服从您指定的TimeSpan。
  4. 请记住将GameTimer对象添加到Game.Components中,以便它参与Game的Update循环,否则Tick将永远不会触发。