2

はい、これは私のゲーム エンジンに関する別の質問です。非常に順調に進んでいます。皆さんのおかげです。

したがって、ビデオを見た (または見ていない) 場合、ゲーム内のオブジェクトは、位置、スプライト、動き、衝突、音、ヘルスなどのさまざまなコンポーネントで構成されています。エンティティとコンポーネント間の通信をタイプしますが、これはこれまでのところしかありません。エンティティの位置など、何かを尋ねる必要がある場合がたくさんあります。

私のコードには、次のような行が数十行あります。

SomeComponent comp = (SomeComponent)entity.GetComponent(typeof(SomeComponent));
if (comp != null) comp.GetSomething();

私はこれが非常に醜いことを知っており、キャストが不適切な OO 設計のにおいがすることを知っています。しかし、物事が複雑であるほど、より良い方法はないようです。もちろん、コンポーネントの種類を「ハードコーディング」して、

SomeComponent comp = entity.GetSomeComponent();

しかし、それは警官のようで、悪いものです。

私は文字通り、これを書いているときに、コードを何ヶ月も解決策なしでこのようにしていた後、ジェネリックが私を助けることに気づきました。

SomeComponent comp = entity.GetComponent<SomeComponent>();

それがどのように機能するかは驚くべきことです。とにかく、これはまだセマンティックの改善にすぎません。私の疑問は残ります。

  1. これは実際にそんなに悪いことですか?
  2. より良い代替手段は何ですか?
4

3 に答える 3

1

なぜそれが悪いと思いますか?

これがジェネリック医薬品の目的です。

于 2011-02-02T11:07:36.120 に答える
0

ゲームの全体的なデザインを知らなければ、そのパターンが単独で良いか悪いかを知ることは困難です。それが機能し、うまく機能する場合、それに対する唯一の潜在的な議論はアーキテクチャです-それはスケーリングしますか?

于 2010-05-12T15:02:43.613 に答える
0

私はゲームに取り組んでおり、ジェネリック型パラメーターを使用して、同じ方法でさまざまなコンポーネントを検索しています。http://t-machine.org/index.php/2010/05/09/entity-system-1-javaandroid/からアイデアを得ました 。それが最善の方法かどうかはわかりませんが、ジェネリック システムの誤用のように感じます。しかし、それは機能します。

于 2010-07-30T20:47:14.683 に答える