我有一个组织游戏循环的想法。我对性能有些怀疑。可能有更好的做事方式。
假设您有一系列游戏组件。他们都被要求在每次游戏循环迭代中做一些事情。例如:
GameData data; // shared
app.registerComponent("AI", ComponentAI(data) );
app.registerComponent("Logic", ComponentGameLogic(data) );
app.registerComponent("2d", Component2d(data) );
app.registerComponent("Menu", ComponentMenu(data) )->setActive(false);
//...
while (ok)
{
//...
app.runAllComponents();
//...
}
好处:
- 良好的基于组件的应用程序,无依赖关系,良好的模块化
- 我们可以动态激活/停用、注册/注销组件
- 一些组件可以透明地删除或替换,系统仍然可以正常工作,因为没有发生任何事情(将 2d 更改为 3d)(团队合作:每个程序员都创建他/她自己的组件,并且不需要其他组件来编译代码)
疑点:
- 游戏循环中的内部循环,对 Component::run() 进行虚拟调用
- 我希望 Component::run() 返回 bool 值并检查该值。如果返回 false,则必须停用组件。所以内循环变得更加昂贵。
那么,这个解决方案有多好?你在实际项目中使用过它吗?