3

エンティティ コンポーネント システムは、ゲーム開発におけるオブジェクト指向プログラミングで発生するスケールの問題を解決することができます。ECS に関していくつか質問があります。

概要を説明すると、いくつかのコンポーネント (データを持つ) を含むエンティティと、歩行ロジック、戦闘ロジックなどのロジックを持つシステムがあります。したがって、どのゲームでも、敵はエンティティであり、ヒーローは独自のシステムを持つエンティティなどです。各プレイヤー/敵はエンティティになります。

  1. 最初は、ステージ、グループ、およびアクターを使用していました。ステージは、階層を使用してアクターにイベントを渡し、イベントに基づいてそれを処理していました。私はエンティティを持っているので、何が私の新しいアクターになりますか? すべてのエンティティがアクターになりますか? はいの場合、各行為で、すべてのコンポーネントの更新関数を呼び出し、描画関数で描画しますよね?
  2. エンティティ コンポーネント システムはアクターのみに使用されますか、それともステージ、グループ、カメラにも使用する必要がありますか? すべての人に使用する必要がある場合、誰かがその方法を理解するのを助けることができますか?

オブジェクト指向では、グループにアクターを追加し、適切なタスクを実行するイベントに基づいてアクターにイベントをステージ送信するので簡単です。ECS で考えるのは初めてなので、何かが足りない場合は申し訳ありません。コードを書き始めましたが、システム全体を考えているうちに混乱してしまいました。役者の仕事の仕方はわかったけど、それをグループや舞台、カメラなどでどうやって働かせるか。

4

1 に答える 1

4

Stage実際には、これはある種のエンティティ システムそのものであるため、この質問に答えることはできません。はStageエンティティ システムとして解釈できます。AGroupは、特定のコンポーネントを持つすべてのエンティティであり、Actorsあなたのエンティティです。とカスタム エンティティ システムを一緒に使用Stageしてもあまり意味がありません。

のような特定の技術的/固有のものは、Cameraエンティティとしてモデル化するべきではありません。すべてをエンティティ システムに押し込む必要はなく、最終的には収まりません。

全体として、エンティティ コンポーネント システムが実際に必要な理由を再考する必要があります。このプログラミング スタイルの背後にある主なアイデアは、すべてのコンポーネントをメモリ内でグループ化することにより、メモリ レイアウトを最適化することです。Java を使用すると、オブジェクトの場所を正確に制御できないため (C++ のように)、これは非常に困難です。もう 1 つの動機は、エンティティに使用できる抽象的な再利用可能なコンポーネントを用意することですが、実際には、標準の OO エンティティ階層を使用してそれを行うこともできます。モバイル デバイス向けの小さなゲームの場合、パフォーマンスの顕著な違いを実際に感じるには、おそらく十分な数のエンティティがなく、私の意見では、エンティティ コンポーネント システムのスタイルはどこにも適合しません。

それでも固執したい場合は、を使用しないでくださいStage

于 2013-11-17T19:54:12.143 に答える