無限レベルの手続き型生成


16

無限の2Dレベルを手続き的に生成するための良いアプローチは何ですか?レベルはどちらかの次元で制約される可能性がありますが、必ずしもそうではありません。

これまでのところ、私にとって最も意味のあるアプローチは、グリッドベースの半径を使用することです。たとえば、プレイエリアを特定のサイズの正方形のグリッドに分割し、プレーヤーの周囲の半径にX個の正方形をロードします。その後、プレーヤーが別の正方形に移動すると、次のセットが構築され、さらに遠くにドロップされます(探索された領域を永続化する必要はありません)。オブジェクトが正方形の外側のリングを離れると、それらは世界から削除されます。より良い方法または別の方法がありますか?または、これが適切なアプローチである場合、潜在的な問題は何ですか?

議論のために、レベルはトップダウンの小惑星フィールドであり、パワーアップなどが散在していると考えることができます。


2
これは、関連すると思わ:gamedev.stackexchange.com/questions/2230/...
jacmoe

^したがって、右側の「関連」列にあります。リンクする必要はありません。
リケット

7
そして、それは「リンクされた」だけでなく「関連した」ものになりました。:)
jacmoe

回答:


6

「無限の」世界の問題は、基礎となる座標が無限でない可能性があることです。場合によっては、ゲームがプレーヤーの速度を十分に低下させても、たとえば整数のラップアラウンドに到達するまでの時間が長くなりすぎてしまうため、心配する必要はないかもしれません。ただし、速度の大きな違いを考慮に入れる場合、非常に正確で非常に広範囲に及ぶ必要があるかもしれません。そのためには、座標について考える必要があります。合理的な修正方法は、グリッドの整数座標と各グリッド参照のフロート座標など、2つのレベルを持つことです。

余談ですが、グリッド座標をシードとして使用して、指定された正方形にランダムな世界を作成することで、世界のレイアウトを適切に保持することもできます。そのため、プレイヤーがエリアを離れたとき、それをドロップし、プレイヤーが戻ってきたときに、シードからそれを再生成できます。


4
この問題は、時折世界を中心に置くことで回避できます。
ジョナサンフィショフ

また、整数のラップアラウンドだけでなく、浮動小数点数が大きい場合の小さな浮動小数点の変更の不正確さにも注意してください。これを試してください:float pos = 1000000000.0f; float nextPos = pos + 0.001f; float diff = nextPos - pos; 私のマシンでは、diffは0です。
tenpn10年

これらはすべて良い点です。十分に効率的である限り、新しい正方形のセットが生成されるたびに座標を再センタリングすることが適切だと思います。
コリン・ギスラソン

ちなみに、これはPCバージョンのMinecraftと同じソリューションです:)固定整数+フロートwich +1は私の意見では最適なソリューションです
-GameDeveloper
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.