【问题标题】:'Game loop' in a none-game application?非游戏应用程序中的“游戏循环”?
【发布时间】:2014-02-14 21:39:25
【问题描述】:

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

除了游戏之外,这是否在其他类型的应用程序中也能看到?一个'常量更新循环'?

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

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

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

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

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

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

谢谢

【问题讨论】:

标签: loops architecture game-loop


【解决方案1】:

基本上,您在所有应用程序和游戏中都有一个循环。如何实现取决于您的应用程序/游戏的系统和需求。如果只是因为您提到了 MS Paint,我将大致针对 Windows 系统做出回应

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

MS Paint 和大多数应用程序将使用等待下一个事件的主循环,这意味着,它将允许操作系统 (Windows) 在有消息/事件要处理之前不处理任何内容(例如:鼠标移动、按钮按下、重绘等)。

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

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

【讨论】:

    猜你喜欢
    • 2018-10-14
    • 2014-01-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-03-06
    • 2011-12-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多