最近、C# でゲームのコーディングを試みています。これには XNA を使用していません。ゲームを最初からコーディングすれば、より多くのことを学べると思ったからです (ただし、マルチメディア エンジンを使用しています)。
私は 2D RPG ゲームを設計しようとしています - 少し野心的ですが、少なくともゲームの基本的な部分 (つまり、「ボイラー プレート」コード) をかなりよく理解しており、一部に到達しました。ここからどこへ行けばいいのかわからない場所。
2D ゲームでは、さまざまな「エリア」を歩き回ってゲームを進めます。「ポータル タイル」にヒットすると、次のエリアなどに移動します。
これらのエリア オブジェクトを設定する方法がわかりません。これが私の最初のアイデアでした。各エリアにはいくつかの異なるコレクション構造があります (たとえば、可視性四分木、衝突四分木、AI エンティティ リストなど)。したがって、敵エンティティをゲームに追加する場合、それは可視性クワッドツリー、衝突クワッドツリー (エンティティと衝突できるため)、および AI エンティティ リストに配置されます。エリアが更新要求を受け取ると、これらの各構造体に自分自身を更新するように指示し、次にエンティティに自分自身を更新するように指示します。これまでのところ、すべて順調です。
私の質問は次のとおりです。この敵が他のオブジェクトと通信する必要がある場合はどうなりますか? たとえば、プレイヤーが特定の範囲内にいるかどうかを知る必要がある場合があります。または、プレイヤーによってヒットされたかどうか。または、すべての衝突可能なオブジェクトが領域内にある場所 (経路探索が可能)。
この問題に対する最初の (そして悪い) 解決策は、単純に各エンティティに各コレクションへの参照を渡すことです。しかし、これは明らかに密結合オブジェクトを助長しますが、これは良くありません。
私が思いついた 2 番目の解決策は、各エンティティがメッセージ構造を介してエリアを照会できるようにすることでした。したがって、敵は「自分の位置から X の距離内にある各エンティティのリストをください」と言うことができ、そのエリアは答えを返します。しかし、この領域にさらに多くの可能性をコーディングする必要があるため、これはますます難しくなります (「自分から X 距離以内にないエンティティのリストをください」、「自分の X 距離以内にないエンティティのリストをください」 ×」など)。
私が探しているのは、このオブジェクト間通信の問題に対する定評のある解決策であり、基本的にエリアを設定する方法です。確かではありませんが、ある種のメッセージングシステムも必要になると思います。
読んでくれてありがとう。