WPF中用于游戏的恒定帧率

Nic*_*las 9 c# wpf rendering

我使用C#在WPF中创建一个简单的车辆和抛射物模拟游戏.我需要有一个恒定的帧速率(即我需要知道在每帧中以一定的速度移动一个物体的程度).这样我就可以订阅一个事件,根据游戏的物理特性计算和更新位置到CompositionTarget.Rendering事件.

CompositionTarget.Rendering += UpdatePositions;
Run Code Online (Sandbox Code Playgroud)

我用Google搜索了一段时间,但没有找到答案.WPF中的fps 似乎是任意的,并且使用秒表来知道帧与前一帧之间经过的时间根本不会是干净的.

我还考虑创建自己的帧速率,通过每隔几毫秒调用UpdatePositions并希望渲染相应地发生并具有平滑的动画.这似乎重新发明了轮子,我想不出一种以干净简单的方式实现这一点的方法.

谢谢!

Pat*_*lug 9

在WPF中获取恒定的帧速率是不可能的.WPF基于动态帧速率的概念,这使得它几乎无法用于任何游戏开发.

一些相关信息:

为什么WPF中的帧率不规则且不限于监视刷新?

http://rhnatiuk.wordpress.com/2008/12/21/wpf-video-playback-problems/

正如其他人已经指出的那样,不幸的是,解决方案是不使用WPF进行游戏开发.

我已广泛使用WPF动画,在WPF中获得任何平滑动画是绝对痛苦的(如果你想这样做,我在这里写下了一些最佳实践).

我确信WPF对游戏开发不利的原因还有很多.一个例子是您无法在WPF中创建全屏应用程序,因为WPF应用程序始终是窗口化的.这意味着您无法更改游戏的分辨率以使其在全屏幕中流畅,这实际上意味着您无法在WPF中创建全屏游戏并期望获得良好的结果.

如果你对你的游戏或游戏开发非常认真,这不仅仅是一个原型或只是为了好玩,那么我建议你放弃WPF并使用别的东西,否则你只是让自己失望和低于标准质量.