2

たとえば、X 座標と Y 座標に 5.000.000 の異なる整数座標を使用したマップの抽象表現があるため、これは非常に大きな 2 次元の四角形です。

そして、その可変サイズの長方形の中に、いくつかのオブジェクト (キャラクター、モンスター、npcs) があります。プレイヤーはこの長方形の位置を選択でき、その位置にモンスターやキャラクターがいるかどうかを確認する必要があります。

これまでのところ、列と行を持つ GameMatrix というカスタム クラスを作成しました。列には 3000x2000 の位置 (キャラクターのエリア ビュー) があります。

私のゲームのプレーヤーが上記の座標をクリックするとforeach()、マトリックス内のすべての要素を実行する必要があり、ほとんどの場合、それは空です。

これを解決するより良い方法はありますか?具体的には、非常に大きな長方形と座標を使用して、効率的な方法でその座標内にオブジェクトがあるかどうかを確認するための最良の方法は何かを尋ねています。

言い忘れましたが、これはサーバー側でミリ秒ごとに数回行われます。だから私は多くのパフォーマンスが必要です。

編集:言及するのを忘れました、私はC#を使用しています。

4

2 に答える 2

4

グリッド内の項目の数が非常に少ない (数十の項目のように) 場合を除き、四分木実装を使用する必要があります。最良の選択。

こちらをご覧ください

http://en.wikipedia.org/wiki/Quadtree

クアッド ツリーは非常に迅速かつ効率的にクエリを実行できますが、更新には少しコストがかかることに注意してください。つまり、アイテムがマップ上で頻繁に移動する場合、パフォーマンスを向上させるためにこれを行うのがより複雑になります。

于 2012-10-25T06:36:13.703 に答える
2

最初に最も単純なソリューションを試し、後で最適化について心配することをお勧めします。

配列を使用してみてください。ソリューションを改善してください。設定によっては、リストまたはハッシュ マップも興味深い場合があります。

于 2012-10-25T06:40:22.200 に答える