2

サイドスクローラーのスポーン情報を保存するのに最適な方法を探しています。私が書いているゲームはスーパーマリオブラザーズと非常によく似ています。私が実装しようとしているのは、レベルを移動するときに、敵が特定の場所に出現する必要があるということです。この情報をレベルに保存したいのですが、敵をランダムにスポーンしたくありません。プレイヤーが特定の場所(マリオなど)に到達したときに、スポーンされたオブジェクトを保存および取得するための高レベルの戦略を探しています。グーグルの周りからまともなチュートリアルや提案を見つけることができませんでした。

レベルはタイルベースであるため、マップはTile[][]です。現在、各タイルは16x16ピクセルです。

これまでに見た唯一の良い提案は、スポーン情報を2D配列に格納することです。ここで、最初の次元はxで、2番目の次元はyで、タイルスペースで指定されます。その実装で私が抱えている問題は、プレーヤーが(160、0)と言っている場合、特定の敵をスポーンしたいということです。ただし、次にレベルがリセットされたときに、プレイヤーが(160、5)にいる場合は、同じ敵をスポーンしたいと思います。したがって、その実装を機能させるには、特定のy位置をスキャンする必要があります。

より効率的なストレージの機械化を探しています。正しいスポーンをすばやく取得でき、スポーン位置を格納するメモリを無駄にしないものが必要です。

このためのゲームの一般的な戦略はありますか?

4

1 に答える 1

3

スポーンポイントが多すぎない限り、単純なリストで十分です。各リストエントリには、XY座標とスポーン情報があります。リストを繰り返し処理して、プレーヤーがスポーンポイントの近くにいるかどうかを判断します。これは、わずかに満たされた2Dアレイよりもはるかにメモリ効率が高く、実装が非常に簡単で、おそらく十分に高速です。

ある種の空間インデックスが必要なほど高速ではないことが判明した場合、kdツリーは実装がかなり簡単で、近接検索に優れたパフォーマンスを提供します。別の解決策は、このペーパー(PDF)で説明されているように、局所性鋭敏型ハッシュを使用することです。

于 2010-08-16T11:52:17.313 に答える