主要功能与国家之间的沟通

时间:2012-10-07 13:31:14

标签: c++ oop design-patterns communication

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

主要特征是创建所谓的系统,涵盖游戏菜单和游戏关卡。这些系统提供了诸如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();
     ...
}

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

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

1 个答案:

答案 0 :(得分:1)

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

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

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

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

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

我建议使用一个单独的线程来监听网络事件,而不是你的消息线程监听图形事件。它将工作分开,有助于提高图形性能。