2Dタイルベースのゲームでは、NPCとタイルはどのように相互に参照する必要がありますか?


9

トップダウン2Dゲーム用のタイルエンジンを作成しています。基本的に、世界はタイルのグリッドで構成されています。

次に、たとえばマップ上を移動できるNPCを配置したいと思います。

何が一番いいと思いますか:

  1. 各タイルには、そのタイル上にあるNPCへのポインター、またはNULLポインターがあります
  2. NPCのリストがあり、その上にあるタイルの座標があります。
  3. 他に何か?

おもう

  1. 衝突検出の方が高速ですが、より多くのメモリ領域を使用し、マップ内のすべてのNPCを見つけるのに時間がかかります。
  2. 反対です。

回答:


11

なぜ両方ではない?特定のタイルにNPCがあるかどうかを確認したい場合があります(前述のように、衝突検出など)。また、世界中のすべてのNPCを反復処理したい場合もあります( AIメソッドをフレームごとに実行する場合など)。

メモリに制約のあるプラットフォームで作業している場合や、非常に巨大なマップを使用している場合を除き、タイルあたりのポインターはそれほど多くのメモリではありません。


5
+1私はこれに同意する傾向がありますが、@ lezebulon、両方を一緒に更新する必要があるロジックをできるだけ早くカプセル化することをお勧めします。つまり、プレーヤーがタイルを離れると、プレーヤーからタイルとタイルからプレーヤーの両方のポインターを同時に削除する1つのアトミック操作(関数呼び出し)が必要です。プレーヤーがタイルに到着した場合も同様に、2つのポインター割り当てを一緒に行います。これにより、参照が互いに一致しない、つまり、一方が存在し、もう一方が一致しないという潜在的な混乱を回避できます。
エンジニア、

0

マップとの衝突をどのように処理しますか?衝突レイヤーがある場合、非常に簡単な方法は、最初にNPCのリストを作成し、それらがどのタイル上にあるかを示す座標を指定してから、そのリストを反復処理し、NPCの下の衝突レイヤータイルを衝突タイルとしてマークすることです。このようにして、NPCに対する衝突は、マップの他の部分と同時に処理されます。もちろん、NPCが動かなければ...

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.