我正在尝试创建一个实体/组件系统,该系统会自动匹配合适的实体和合适的系统。我正在使用std::bitset
andRTTI
为每个组件类型自动分配一个位值。
系统定义如下:MovementSystem : System<Position, Velocity>
.
MovementSystem
Position
,在本例中,接受任何同时具有和Velocity
组件(以及任何其他组件)的实体。
为了检查一个实体是否合适,我将系统的位集与实体的位集进行比较。
// Let's assume there are max 4 components
1 1 0 1 // Entity bitset
^ ^ ^
Position Velocity OtherB
1 1 0 0 // Suitable example system bitset
^ ^
Position Velocity
1 1 1 0 // Unsuitable example system bitset
^ ^ ^ // Entity does not have OtherA!
Position Velocity OtherA
到目前为止,我的解决方案是这个:
if(entityBitset & systemBitset) == systemBitset)) { /* entity is suitable! */ }
它似乎有效,但我在白板上涂鸦 bitset 后发现了它。这是对的吗?可以进一步改进吗?(在我的游戏中实体会被创建和销毁无数次,所以性能非常重要!)
如果需要(不应该),代码就在这里,但几乎不可能阅读。