非游戏应用程序中的“游戏循环”?

时间:2014-02-14 21:39:25

标签: loops architecture game-loop

在实时游戏中,总会有一个每隔几毫秒运行一次的游戏循环,用新数据更新游戏并重新绘制整个屏幕。

这是除了游戏之外的其他类型的应用程序中看到的东西吗? '常规更新循环'

例如,想象一下像MSPaint这样的应用程序。用户可以使用鼠标在屏幕上绘制线条。正在绘制的线条正在绘制时显示在屏幕上

请想象一下,这条线实际上是由许多较小的线组成,每条线长2个像素。将这些小行存储在List中是有意义的。

但正如我所说,正在绘制的线条(大线,由许多小线组成)在被绘制时显示。这意味着需要重新显示屏幕才能显示前一刻添加的新行。

但是 - 如果我弄错了,请纠正我 - 很难重新绘制屏幕中绘制新小线的特定部分。如果是这样,则需要重新绘制整个屏幕。

因此,使用“更新循环”来不断重新绘制整个屏幕是有意义的,并且不断遍历行列表并反复绘制这些行 - 就像在游戏中一样。

这种方法是否存在于非游戏应用程序中,特别是“绘图”应用程序中?

由于

1 个答案:

答案 0 :(得分:0)

基本上,你在所有应用程序和游戏中都有一个循环。如何实现取决于您的应用程序/游戏的系统和愿望。如果只是因为你提到了MS Paint

,我会松散地将我的反应建立在Windows系统上

MS Paint可能不会像你提到的那样包含List行,而是直接在每帧编辑位图图像,立即着色所需像素然后绘制它。在这种情况下,绘制图像/应用程序的一小部分就像告诉"这部分"图像的绘制本身"在那里"。因此,当您移动铅笔工具时,像素会变黑并被绘制。

MS Paint和大多数应用程序将使用WAITS进行下一个事件的主循环,这意味着它将允许操作系统(Windows)在处理消息/事件之前不处理任何事情(例如:Mouse Move,按下按钮,重绘等)。

对于游戏来说,它需要有所不同。在继续处理之前,游戏(通常)不希望操作系统等待下一个消息/事件。而是在这里轮询操作系统以检查是否有要处理的消息,如果有,则处理它们,如果没有继续游戏创建单个帧(执行更新和渲染/绘制场景。)

当用户不进行交互时,MS Paint不需要继续更新和绘图,这是应用程序的首选,因为不断更新/绘图会占用大量系统资源,如果每个应用程序都这样做,你就不会# 39,你可能会像现在一样同时运行30件事。