主要功能和状态之间的通信
Communication between Main Function and States
我考虑用以下设计方法构建一个游戏引擎。
主要特点是创建所谓的系统,包括游戏菜单和游戏级别。这些系统提供了像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();
...
}
通过这种方式,我的代码变得结构化并且(在我看来)易于理解。但是,主要功能如何与系统通信呢?
例如,菜单如何告诉主功能用户已经选择了一个级别,以及哪个级别?为了让主功能删除菜单并创建一个新的级别对象。
我认为你在这里试图做的是组织一个完整的模型-视图-控制器架构,你在这里提供的代码是它的模型和控制器部分
http://www.codinghorror.com/blog/2008/05/understanding-model-view-controller.html
如果您有一个main()函数试图侦听来自子系统的消息,并因此调用适当的操作,那么您正试图实现一个单线程响应消息循环。您可以考虑运行一个ACE反应器,它可以监听Qt GUI消息以及其他消息,如网络事件,然后适当地调用您的子系统(尽管可能存在一些性能问题):
http://www.cs.wustl.edu/~schmidt/PDF/reactor-rules.PDF
我不熟悉视频游戏编程的图形引擎,但大多数图形库在初始化过程中都为您提供了一个消息循环,不需要您了解此类细节。您通常所要做的就是创建图形对象,并将它们注册到库的主消息循环中。
与监听图形事件的消息线程相比,我建议使用单独的线程监听网络事件。它将工作区分开,有助于提高图形的性能。
- VSOMEIP-2个设备之间的通信(TCP/UDP)不工作
- 通过插槽和信号在不同线程中的两个qt对象之间进行通信
- C++ 两台不同机器之间通过wifi进行套接字通信
- 线程之间的通信不起作用 - C++
- 通过USB在PC和Arduino之间进行串行通信
- 管理器类和对象类之间的通信
- 使用命名管道在 C# 和C++应用程序之间进行持续通信
- Python 3 套接字和 QTcpsocket (c++) 之间的通信失败
- 如何在嵌入式浏览器和Webside之间进行双向通信
- C++程序和未识别程序之间的双向通信
- 使用C++在同一系统上运行的 2 个服务之间进行通信
- C# 和C++应用程序之间的通信
- 如何在Qt WebChannel中以独立于平台的方式在HTML/Javascript和C++之间进行通信?
- 如何在 gtk+ c 中的回调之间进行通信
- Electron应用程序和Win32本机桌面应用程序之间的进程间通信
- 如何在线程之间进行通信和等效的waitforsingleobject()
- C++ 和 Simulink 之间通过 UDP 进行通信
- 在两个Windows QT5之间进行通信
- 覆盆子Pi(QT C )和Arduino(Arduino IDE)之间的通信
- UNIX中两个进程之间通信的最佳方式:一个运行ruby服务器,另一个运行C++客户端