私はゲームエンティティシステムの周りを包み込み、GamePlayKitを使用しています。 私は次のシナリオに苦しんだ:GKEntityには、コンポーネントの機能にアクセスするためのプロパティまたはメソッドが必要ですか?
RenderComponent
が私のエンティティを表示するSKSpriteNode
参照GKComponent
です。私はGKEntity
から派生CharacterEntity
を持って
(...、MapY
、私の場合には、これはMapX
などのプロパティが含まれますように)
MetaDataComponent
は、エンティティに関する情報の様々なビットを保持している別のコンポーネントです。 エンティティを初期化するために、スプライトに使用するテクスチャの名前を渡します。これにより私はRenderComponent
を作成することができます。
MetaDataComponent
を初期化するには3つのオプションがあり、そのうちの1つがベストプラクティスと考えられているのだろうか?私のコンポーネント内のすべてのプロパティのために
- 、
init()
にパラメータを追加
- コンポーネントのプロパティを更新します
Character
クラスのプロパティを公開します。 - モデルオブジェクトをエンティティに渡し、それからコンポーネントを初期化します。
私の考え:
- 番号1:私のエンティティが持っているより多くのコンポーネント、私が得るより多くのparams ...これは本当に私の好みではありません。
- 番号2:エンティティは「愚か」で、データは持ちません。それは純粋な形で、エンティティは単なる数字です。そこに小道具を加えることは間違っていると感じます。
- 番号3:モデルオブジェクト内のとのデータにデータが含まれているため、私には
MetaData
のようなモデルオブジェクトを持っていると気分が良くて冗長です。おそらく、コンポーネントのプロパティではなく、モデルオブジェクトをコンポーネントに格納させることがありますか?
エンティティにRenderComponent
があると予想される場合、そのコンポーネントをクエリして使用できます。あるいは、エンティティ自体にメソッドを追加することができます。例えば、setRenderPosition
のように、必要なコンポーネントの存在をチェックし、それを更新します。もう一度疑問があります、これを行う際にここに間違いがあるかどうかです。
優秀な質問です。これはAppleのゲームWIPの「忘れられた」フレームワークで、CAKeyFrameAnimationはAppleプラットフォームでの忘れられない手段のようなものです。 – Confused