質問
タイトルについて申し訳ありませんが、より短い/より良い説明が見つからないようです..
状況は次のとおりです。大きなマップがある単純なゲームを作成しています (単純ですが、サイズが非常に大きい)。そのマップには多くの敵もいますが、アクションはメイン キャラクターの周りだけです (マップのごく一部である特定の半径内)。
各「ティック」(またはステップ、またはそれを何と呼ぶか)で、次の移動を決定するために、これらのオブジェクトのそれぞれに対して呼び出される特定の関数があります。パフォーマンス上の理由から、自分の視野の外側 (または少なくとも非常に遠くのもの) で何が起こるかは気にしないので、非常に異質なオブジェクトに対してその関数を呼び出したくありません。
これらのオブジェクトを管理して、マップ内を移動したときに更新される近くのオブジェクトのリストを常に保持するにはどうすればよいですか?
(C++でタグ付けされていることは知っていますが、どの言語でも構いません-コードをそれほど探しているわけではありません-それはアイデアに関するものです)
私がすでに試したこと
私はいくつかの選択肢を試しました:
- 代替案 1:マップを「ゾーン」に分割し、各ゾーンに敵のリストを保存します。それに関する問題は、私がそれらのゾーンの端にいるとき、および(さらに悪いことに)角(私の周りの4つの異なるゾーン)にいるときに何が起こるかです。また、あるゾーンから別のゾーンに走ると、敵をゾーンに切り替えるのが難しくなります(ただし、機能する可能性のあるものを見つけました...)
- 選択肢 2:
x
マップ全体をスキャンし、距離を移動するたびにアクティブな敵のリストを更新します。代替案 1 のように境界が多いことを心配する必要がないので、少しはましですが、毎回マップ全体をスキャンする必要があります。
私は今、これらの 2 つのソリューションを組み合わせることであるAlternative 3を見ていました。
ただし、より明白な解決策がないことを確認したかったのです。