我正在探索 Go 和实体组件系统。我了解 ECS 的工作原理,我正在尝试复制似乎是 ECS 的首选文档,即http://cowboyprogramming.com/2007/01/05/evolve-your-heirachy/
出于性能考虑,该文档建议使用每种组件类型的静态数组。也就是说,不是组件接口数组(指针数组)。Go 中的问题是循环导入。
我有一个包ecs,其中包含Entity、Component和System类型/接口以及EntityManager的定义。另一个包ecs/components包含各种组件。显然,ecs/components包依赖于ecs。但是,要在EntityManager中声明特定组件的数组,ecs将依赖于ecs/components,因此会创建循环导入。
有没有办法避免这种情况?我知道通常高级系统不应该依赖于低级系统。我还想指出,对于我的目的而言,使用指针数组可能足够快,但我对可能的解决方法感兴趣(供将来参考)
谢谢您的帮助!