タイルベースの世界での位置をどのように扱うべきですか?


7

タイル張りの世界を使用した簡単なタワーディフェンスゲームがあります。クリープとタワーは常にタイルの上にあります。

コードでクリープの位置をどのように表すべきですか?(クリープは現在のタイルとそのタイル上の位置を知っていますか、それとも絶対的な世界の位置を知っていますか?)

私は基本的に、ベストプラクティス、デザインパターンタイプのヒント、またはタイルベースの世界での配置の管理方法に関する一般的な洞察を探しています。

ありがとうございました。


忙しい時期にこのゲームに登場すると予想されるキャラクターは何人ですか?数百、数千、または数万未満ですか?(「クリープ」と「タワー」は、自分で動くことができるあなたの世界のキャラクターのタイプだと思います。)
ランドルフリチャードソン

1
間違いなく数百未満です。クリープはモンスターを動かし、タワーはクリープを動かしたり撃ったりはしません。
pwny

(+1で答えが明確になりました。)そのような数が少ない場合は、配列を使用してメモリ内の位置を保持できます。RAMを使用する利点は速度です。タワーのコードは配列を簡単に検索してクリープを探し、範囲内にいる人だけを狙うことができます。
ランドルフリチャードソン2011

うまくいけば、人々がさまざまな方法やアプローチを提案してくれるので、ゲームに最適なものを決定するための実験を行うことができます。タイル固有の位置とグローバルワールドポジションがあることをほのめかしたときに、タイルが何を意味するかをもう少し詳しく説明するのに役立ちます。グリッド?
ランドルフリチャードソン2011

1
重複の可能性:トップダウンのRPGの動きにどのように取り組むか?、2つの質問にまったく同じ(正しい)回答を与えることができる場合、それらはおそらく重複であるという原則に従います。具体的には、そのスレッドからの私の答えがこの質問にも答えるかもしれません。
doppelgreener

回答:


6

私の経験では、タイルベースの世界で位置を処理する最良の方法は、タイルベースの世界にいることを無視することです。つまり、エンティティをワールド位置に保存し、エンティティが移動するパスをワールド空間に保存し、可能な場合はエンティティや他のゲームロジックにタイルについて知らせないでください。まったく。

タイルを検討する際の問題は、タイルがゲームコードにコーナーケースを導入することです。コードが微妙に誤動作する可能性がある多くの新しい場所。(たとえば)タワーは、自分のタイルのエンティティにどれだけ近いかだけでなく、他のタイルのエンティティにも通知できる必要があります。そして、タイルについて考えているとすぐに、タイルの隣を見つけることを考え始めます。これは、バグを(特にプレイフィールドの端と角に沿って)導入するのも簡単です。

タイルベースのワールドは、レベル編集に非常に便利です。しかし、私のアドバイスは、編集にはタイル構造のみを使用することです。レベルの構築方法がゲームロジック自体に広がらないようにしてください。


レベル編集について言及することに感謝します。これは、このゲームに最初からタイルがある理由です。
pwny

タイルベースの世界での編集から発生する可能性がある1つの問題は、多くのタイルにまたがるかなり大きな町を構築している場合、異なるタイルをめくって、確認にかなりの時間を費やすことになるということです。並べられたタイルの間に物事が並んでいます。(とにかく、カスタムの世界編集ツールが同じゲーム開発者によって開発されることを想定しています。)
Randolf Richardson '13 / 06/17

3

私はあなたのエンティティにワールドポジションを使用します。これは、世界が実際に巨大にならない限りうまく機能します(世界の位置が精度のために実用的でなくなるため、世界をチャンクに分割する必要があります)。

現在のタイルは、x座標とy座標から簡単に計算できます。また、世界座標があるとエンティティの比較がはるかに簡単になります(たとえば、エンティティXがタワーYの範囲にあるかどうか)。

他のアプローチを使用することもできますが、常に2セットの座標(タイルインデックスとタイル内の位置)を処理する必要があります。

結論として:どちらのアプローチも機能しますが、ワールド座標を使用するほうがはるかに実用的です(扱う座標が少なく、必要な計算が少ない)。便宜上、エンティティには、その場で現在のタイル位置を計算するxおよびyタイルインデックスのゲッターメソッドを含めることもできます。

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