【问题标题】:Where is Monogame "while" or "for" loopMonogame“while”或“for”循环在哪里
【发布时间】:2017-03-31 15:00:04
【问题描述】:

总的来说,我对 C# 和游戏开发还是比较陌生,

我正在查看 Monogame 框架,我想知道 LOOP 在哪里。

我的意思是,据我所知,要制作一个 LOOP,您必须制作一个 WHILE()、一个 FOR() 或递归,而我在 Monogame 中找不到任何东西,那么 GAMELOOP 在哪里?

我使用了一些游戏框架(在 C++ 中),例如:SFML、OpenGl(学校项目),似乎它们都需要一个显式循环:

while(window is open) // pseudo code example

但不是在 Monogame 中,那么循环是在哪里制作的?

事实是,如果有某种方法可以在没有循环的情况下制作相同的东西,我想了解一下,它看起来非常有用。

【问题讨论】:

  • 您不需要使用whilefor 进行循环,您可以使用windows 消息泵并一遍又一遍地发送相同的消息。您可以使用定时操作每 X 毫秒调用一次特定方法。
  • 您能否再澄清一下您的问题。你在谈论几件事。游戏循环与只有循环非常不同。
  • 我认为您正在寻找在游戏运行时不断调用的 Update() 方法。对吗?
  • 另外,如果您是 C# 和游戏开发新手,我不建议您从 MonoGame 开始。或许首先尝试像 Unity3D 这样的完整游戏开发引擎,而不是框架。
  • 游戏循环在 github.com/MonoGame/MonoGame/blob/master/MonoGame.Framework/… 中完成,它要么调用 Platform.StartRunLoop 要么 Platform.RunLoop ,它再次调用特定于平台的函数来实现事件/游戏循环

标签: c# monogame


【解决方案1】:

MonoGame 中没有可用于保持游戏运行的主“循环”。相反,该框架提供了两种方法来让您保持游戏逻辑和显示刷新为最新:

  • Update() - 应更改游戏状态以作为响应 用户输入和其他检查
  • Draw() - 在屏幕上实际绘制内容以表示游戏的当前状态

这些方法会在您的游戏运行时不断调用,这与您可能在其他游戏框架和语言中找到的主循环非常相似。

【讨论】:

  • 从技术上讲,有一个游戏循环,但它在框架内部,您无法直接访问它。它会在每次循环时调用方法,并且您可以访问这些方法。
  • @AlexPaven 是的,我刚刚意识到这一点并编辑了帖子以使其更清晰