gpt4 book ai didi

c++ - Main 函数与状态之间的通信

转载 作者:行者123 更新时间:2023-11-28 07:55:44 26 4
gpt4 key购买 nike

我考虑用以下设计方法构建一个游戏引擎。

主要特点是创建所谓的系统,涵盖游戏菜单和游戏关卡。这些系统提供了诸如 Window 之类的对象来绘制,Input 来获取,Sound 来播放,也许还有 Network与服务器通信。

class System // abstract class
{
Window* Window;
Input* Input;
...

System(Window* Window, Input* Input, ...)
{
this->Window = Window;
this->Input= Input;
...
}

virtual Pause() = 0;
virtual Resume() = 0;
}

主要功能处理系统,从而处理菜单和级别。假设 LevelOne 派生自 System

int main()
{
LevelOne Tutorial(&Window, &Input, ...);
Tutorial.Pause();
...
}

这样我的代码就变得结构化并且(在我看来)易于理解。但是主要功能如何与系统通信?

例如,菜单如何告诉主要功能用户选择了一个级别,以及是哪个级别?为了让主函数删除菜单并创建一个新的关卡对象。

最佳答案

我认为你在这里试图做的是组织一个完整的模型- View - Controller 架构,你在这里提供的代码是它的模型和 Controller 部分。看网上关于MVC的一些解释:

http://www.codinghorror.com/blog/2008/05/understanding-model-view-controller.html

如果您有一个 main() 函数试图监听来自子系统的消息并因此调用适当的操作,那么您正在尝试实现单线程响应式(Reactive)消息循环。您可以考虑运行一个 ACE react 器,它可以监听 Qt GUI 消息以及网络事件等其他消息,然后适本地调用您的子系统(尽管可能存在一些性能问题):

http://www.cs.wustl.edu/~schmidt/PDF/reactor-rules.pdf

我不熟悉用于视频游戏编程的图形引擎,但大多数图形库在其初始化期间为您提供了一个消息循环,不需要您了解此类细节。您通常需要做的就是创建图形对象并将它们注册到库的主消息循环中。

与监听图形事件的消息线程相比,我建议使用单独的线程监听网络事件。它将工作分开并有助于提高图形的性能。

关于c++ - Main 函数与状态之间的通信,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12769279/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com