3

私は、Java1.6と一緒にLWJGLを使用して2DトップダウンRPGを書いています。これで、レンダリングと入力のメソッドが正常に機能し、ゲームのロジックのプログラミングを開始しました。

したがって、エンティティのArrayListを保持するWorldというクラスがあります。ゲームに(交差する正方形を使用して)単純な衝突を実装したいのですが、問題はないはずです。私が今抱えている唯一の問題は、リスト全体を反復処理することなく、リストの単一のセルにアクセスする方法です。私は、各エンティティ内で実行され、私の世界のすべてのエンティティを反復処理する衝突メソッドを思い付くことができました。それはまったく速くはありませんが、私はそれを速くするために何をすべきか本当にわかりません。

私のゲームはタイルベースですが、動きはタイルからタイルへではなく、小さな部分を歩くことができるため、2次元配列を使用する必要がありません...

エンティティとその衝突を処理する標準的な方法はありますか?(または、ArrayList内にあるエンティティ間の衝突を処理する方法ですか?)

4

1 に答える 1

1

衝突するエンティティを処理する標準的な方法は、スペースを分割することです。あなたの世界は、離散した点でできた2次元の平面です。各ピースは、ポイントの1つに配置できます。ポイントの量によって平面の解像度が決まります。ポイントが多いほど、視覚効果が高くなり、実行する必要のある計算が多くなります。これはトレードオフです。

エンティティの場所とエンティティ自体の間のマップを維持できます。場所は、equalsとgetHashCodeをオーバーライドするオブジェクトによって表されます。ロケーションオブジェクトには、X座標とY座標の2つのメンバーが含まれています。

注-適切かつ効率的な方法でオーバーライドする必要があります。

したがって、座標がわかっている場合は、各エンティティにすばやくアクセスできます。再シャッフルとは、エンティティを削除して新しい座標で追加することであり(これは局所性に最適化できます)、衝突検出は簡単です。同じ場所が占有されているかどうかを確認するだけです。特定のエンティティ。

SOに関するこの質問も参照してください。

于 2012-08-30T18:18:22.730 に答える