エンティティコンポーネントシステムに関するいくつかのドキュメントを読んだ後、私は私のものを実装することにしました。これまでのところ、エンティティとシステムマネージャ(システム)を含むWorldクラス、コンポーネントをstd :: mapとして含むエンティティクラス、およびいくつかのシステムがあります。エンティティをワールドのstd :: vectorとして保持しています。今のところ問題ありません。私を混乱させるのは、エンティティの反復です。それについて明確な心を持つことができないため、その部分を実装することはまだできません。すべてのシステムが、関心のあるエンティティのローカルリストを保持する必要がありますか?または、Worldクラスのエンティティを反復処理し、ネストされたループを作成してシステムを反復処理し、エンティティがシステムに関係するコンポーネントを持っているかどうかを確認する必要がありますか?というのは :
for (entity x : listofentities) {
for (system y : listofsystems) {
if ((x.componentBitmask & y.bitmask) == y.bitmask)
y.update(x, deltatime)
}
}
しかし、ビットマスクシステムは、スクリプト言語を組み込む場合の柔軟性をある程度ブロックすると思います。または、各システムのローカルリストがあると、クラスのメモリ使用量が増加します。私はひどく混乱しています。