2

エンティティ コンポーネント システムについて私がオンラインで読んだほとんどの資料は、それが継承の使用から遠ざかるために使用されていることを示しているようです。しかし、私が知りたいのは、ECS と一緒に継承を使い続けることは可能ですか?

エンジン内に、ほぼ同じ機能を持つ特定の数のエンティティがあるとします。たとえば、移動可能なエンティティ。MovableEntity必要なコンポーネントを追加するオブジェクトを作成することは可能ですか?

public class MovableEntity extends Entity {
    public MovableEntity(int x, int y) {
        addComponent(new PositionComponent(x, y));
        addComponent(new VelocityComponent());
        ...
    }
}
4

3 に答える 3

1

コンポーネントをエンティティに動的に追加/エンティティから削除する必要がない場合は、継承を使用してエンティティを定義できます (複数の継承を持つ言語で)。次のEvolve Your Hierarchy のECS の例を考えてみましょう。

ここに画像の説明を入力

あなたのコンポーネントはクラスに対応します:

  • クラスの位置
  • クラス移動
  • ...

あなたのエンティティはクラスに対応します:

  • クラス Alien : 位置、移動、レンダリング、...
  • クラス Player : 位置、動き、物理学、...
  • ...
于 2016-05-08T01:59:00.327 に答える
0

標準ではありませんが、この方法は非常に便利です。戦士が HP、攻撃、防御を持っているゲームを想像してみてください。列挙型と値を取る統計コンポーネントを作成できます。もう 1 つの方法は、他のエンティティを保持するコンポーネントを用意し、各統計を値と型のコンポーネントを持つエンティティ自体にすることです。私はこれらの両方を試しましたが、初期の結果は気に入りませんでした。(後者は問題なく機能しましたが、非常に複雑でしたが、ECS 設計に厳密に従っています)

最後に、それぞれを Component から継承した StatComponent にしました。これは、すべての統計に共通の操作を実行できることを意味し、非常に便利でした. 秘訣は、OOP の各ビットをバブルに入れることです。それが自己完結型である限り、大きな問題は見られません。

于 2016-08-24T05:09:30.527 に答える