エンティティシステム内でのエンティティの割り当て
エンティティシステム内でエンティティをどのように割り当て/類似する必要があるのか、よくわかりません。私にはさまざまなオプションがありますが、それらのほとんどには短所が関連付けられているようです。すべての場合において、エンティティはID(整数)に似ており、おそらくラッパークラスが関連付けられています。このラッパークラスには、エンティティにコンポーネントを追加/削除するメソッドがあります。 オプションについて言及する前に、ここに私のエンティティシステムの基本構造を示します。 エンティティ ゲーム内のオブジェクトを説明するオブジェクト 成分 エンティティのデータを格納するために使用されます システム 特定のコンポーネントを持つエンティティが含まれています 特定のコンポーネントでエンティティを更新するために使用されます 世界 エンティティシステムのエンティティとシステムが含まれています エンティティを作成/破棄し、システムをそこに追加/削除できます 私が考えた私の選択肢は次のとおりです: オプション1: エンティティラッパークラスを保存せず、次のID /削除されたIDのみを保存します。つまり、エンティティは次のように値で返されます。 Entity entity = world.createEntity(); これは、この設計にいくつかの欠陥があることを除いて、ententxによく似ています。 短所 エンティティラッパークラスが重複している可能性があります(コピークターを実装する必要があり、システムにエンティティを含める必要があるため) エンティティが破棄された場合、重複するエンティティラッパークラスの値は更新されません オプション2: エンティティラッパークラスをオブジェクトプール内に保存します。つまり、エンティティは次のようにポインタ/参照によって返されます。 Entity& e = world.createEntity(); 短所 重複するエンティティがある場合、エンティティが破棄されると、同じエンティティオブジェクトが別のエンティティの割り当てに再利用されることがあります。 オプション3: 未加工のIDを使用し、ラッパーエンティティクラスを忘れます。これの落とし穴は、それに必要な構文だと思います。これを実装するのが最も簡単で簡単に思えるので、これを行うことを考えています。構文が原因で、私はそれについてかなり確信が持てません。 つまり、このデザインでコンポーネントを追加するには、次のようになります。 Entity e = world.createEntity(); world.addComponent<Position>(e, 0, 3); これに付け加えて: Entity e = world.createEntity(); e.addComponent<Position>(0, 3); 短所 …