【发布时间】:2014-12-21 04:10:45
【问题描述】:
Guten Tag zusammen!(德语:大家好!)
请原谅我的英语不是我的母语。由于我已经在这里找到了很多关于我的问题的好答案,所以我现在想问你一些。
在过去的几天里,我对“在 Windows 窗体中实现游戏循环的最佳方法是什么?”这个问题做了一些研究。。我从SlimDX team 中找到了一个很好的解释解决方案,它基于Tom Miller 的工作。
我的问题是:
首先:我们将此解决方案用于游戏循环,这是在渲染帧后重绘 From 的最佳方式?我经常发现的一种方法是调用 Invalidete(),但这对我来说似乎不是一个好主意。这不会在消息队列中添加一条消息并打破每一帧的while循环吗?
第二:据我了解,此循环将消耗整个 CPU 线程(核心)。有没有好的方法可以将其减慢到不消耗整个 CPU 线程的推荐帧速率?
第三: GDI+ 是否能够渲染简单的 2D 游戏?绘图何时变得如此复杂以至于建议使用带有一些 DirectX 或 OpenGL 包装器的硬件加速绘图?
【问题讨论】:
-
这是三个不同的技术问题,但 SO 格式每个问题只允许一个问题。所以,你最好把你的第二点和第三点编辑出来,并将它们作为单独的问题发布。
-
你打破了游戏代码中的所有规则。不要使用 Invalidate(),使用 CreateGraphics() 直接绘制到屏幕上。刻录核心是可以的,通常以垂直刷新为节奏,但在非 DirectX 代码中很难实现。 System.Drawing 适用于 2D 游戏,请务必缓存位图并注意像素格式(32bppPArgb 快 10 倍),GPU 渲染需要完全不同的代码。
-
为什么不直接使用 XNA 而不必担心所有这些事情呢?微软已经停止支持它,但它仍然是一个可行的选择。当然,它会比 GDI 更有效率(尤其是对于游戏而言)。
标签: c# gdi+ game-engine message-queue