3

シーンを利用するゲームエンジンを考えてみましょう。これで、シーンに、現在のシーンのオブジェクトであるアクターのリストを含めることができます。このための疑似は次のようになります。

class Scene
{
    public List<Actor> Actors { get; set; }
    ....
}

ゲームループの場合、エンジンはシーンオブジェクトに対してUpdate()を呼び出し、次にすべてのアクターに対してUpdate()を呼び出します。

さて、私の質問はこれです:アクターが通信できるようにするための良い方法は何ですか(アクターが他のアクターを認識する必要がある場合)?つまり、弾丸を表す俳優がいる可能性があります。この弾丸はすべての敵のアクターを認識する必要があります(弾丸がそれらを殺すことができるようにするためなど)。アクターがいる現在のシーンを参照する各アクターにハンドルを提供できますが、それは悪い考えのように聞こえます(各アクターへのアクセス/パワーの種類)。

できれば他の俳優やシーンからすべての俳優を盲目にし、何らかの契約を通じて行動・コミュニケーションを実現したいのですが、何も思いつきませんでした。

4

3 に答える 3

1

それはあなたが何をしようとしているのかによります。ゲームエンジンが構成ベースの場合、それが解決策になる可能性があります(つまり、各ゲームオブジェクトはクラス名ではなく、それを構成するオブジェクトによって定義され、それらのオブジェクトと対話できます)。それらをすべてシーンに登録して、名前でフェッチしたり、タイプごとに存在する配列を取得したりすることもできます(たとえば、テンプレートメソッドを使用)。Observerパターンを使用することもできます。各ゲームオブジェクトはサービスを提供するインターフェイスを実装し、他のゲームオブジェクトはそのサービスにサブスクライブし、他のオブジェクトの値が更新されると更新されます。有効な解決策はたくさんありますが、私はさらにいくつか貢献しています。それは本当にあなたがオブジェクト間の相互作用から何を取り出したいかに依存します。

于 2012-07-04T10:47:06.703 に答える
0

最も一般的な解決策は、これにビジターパターンを使用することです。ウィキペディアの例ではCADシステムについて説明していますが、このコンテキストではゲームはそれほど違いはありません。

于 2012-07-03T17:45:21.597 に答える
0

これをきれいに実現する方法はたくさんありますが、最も簡単な方法の1つは、Mediatorパターンのバリエーションです。

于 2012-07-03T17:47:07.643 に答える