Guten Tag zusammen!(德语:大家好日子!)
请原谅我的英语,这不是我的母语。由于我已经在这里找到了很多很好的答案,我现在想问你一些。
在过去的几天里,我对“在Windows窗体中实现游戏循环的最佳方式是什么?”进行了一些研究。我在SlimDX team找到了一个很好的解释解决方案,它基于Tom Miller的工作。
我的问题是:
首先:我使用此解决方案进行游戏循环,这是在渲染帧后重绘From的最佳方法吗?我经常发现的一种方法是调用 Invalidete(),但这对我来说不是一个好主意。这不会在消息队列中添加消息并且每帧都会中断while循环吗?
第二:据我所知,这个循环将消耗整个CPU-Thread(Core)。有没有好的方法可以将它降低到不消耗整个CPU-Thread的推荐帧速率?
第三: GDI +是否能够呈现简单的2D游戏?当Drawing变得如此复杂以至于建议使用硬件加速绘图时,某些DirectX或OpenGL包装器是什么?
答案 0 :(得分:1)
我经常发现的一种方式是致电
Invalidate()
,但这对我来说并不是一个好主意。这不会在消息队列中添加消息并且每帧都会中断while循环吗?
是的,这是一个坏主意。您无法控制将消息传递到窗口的频率,这意味着您不应该依赖它。
据我所知,这个循环将占用整个CPU-Thread(Core)。有没有好的方法可以将它降低到不消耗整个CPU-Thread的推荐帧速率?
您可以使用SpinWait
structure(不 Thread.SpinWait
)等待很短时间。将等待时间基于当前帧的持续时间和所需的帧速率。
但通常整个核心的游戏循环不是问题。如果你想最大化你的帧率,甚至可能需要它。
GDI +是否能够呈现简单的2D游戏?
是的,虽然它是一款非常简单的游戏。 GDI 慢。我建议你从一开始就使用硬件加速的解决方案,这样如果GDI被证明是瓶颈,你就不必重写所有内容。