小编Jar*_*arx的帖子

重构:使游戏引擎更加模块化以及如何实现

我的游戏引擎由一系列松散耦合的模块组成,可以加载和卸载.

一些示例是:基本模块,处理窗口管理和响应OS事件,实体管理器,Lua管理器,物理管理器.

现在,这些模块被组织为命名空间,它们的状态通过相应源文件中的局部变量来定义.每个命名空间都有一个Open(),Close()和Update()函数.

现在,我真的不喜欢名称空间的解决方案了.

  • 它不够灵活

  • 即使在现实中可能不需要它,具有创建模块的多个实例的简单能力似乎是正确的

  • 好像我在这里没有使用OOP - 一个带有虚拟Update()成员函数的模块基类听起来更合理

  • 当模块关闭并重新打开时,更难以确保所有变量也将被重置(具有构造函数和析构函数的类将更容易)

  • 如果没有显式调用Open(),Close()和Update(),就无法正确管理模块

所以,我的想法会一直使用为每个模块,从模块基类派生.模块类实例将由ModuleManager类处理,后者会更新它们.

但是OOP的解决方案带来了模块应该如何通信的问题.现在,基础模块告诉控制台模块打印一些东西console::print()

  • 如何解决这个问题而不必使用类似的东西g_ModuleManager.GetConsoleModule()->print()

  • 这个模块管理器怎么能详细工作?

我的最后一个问题是:

  • 对于使用OOP用C++编写模块化游戏引擎这个主题,你有什么进一步的提示吗?

  • 是否有任何设计模式可以帮助我在这种情况下,甚至可能是具体的阅读材料?

c++ refactoring modularity module

7
推荐指数
1
解决办法
1328
查看次数

标签 统计

c++ ×1

modularity ×1

module ×1

refactoring ×1