私はJavaでゲームを作成しています。このゲームでは、キャラクターがマップ内を移動し、テキストファイルから特定のデータを読み取って、マップの周りにいくつかの固体衝突オブジェクト(つまり建物)を配置します。これらのオブジェクトの場所が変更される複数のマップがあります。私の質問は、そのような構造の背後にある衝突を示す特定の色で長方形をペイントするか、マウス座標を読み取ってこれらの構造の配列を検索し、そのポイントが建物にあるかどうかを確認することです。したがって、移動や変更を拒否し、より機知に富み、 /またはより速く。長方形をペイントするのが最適な場合は、構造物の後ろに長方形を残すか、衝突を検出した後で長方形を削除する方が適切です。御時間ありがとうございます!
2 に答える
大学 3 年生のとき、Windows Phone の衝突検出システム アルゴリズムに取り組みました。完璧とは言えませんが、非常に効率的で、ほとんどのゲームに適応できます。
それが機能する方法は非常に簡単でした。オブジェクトには 2 種類ありました。衝突可能なオブジェクト (敵や建物など) と、これらの衝突可能なオブジェクトとの衝突をチェックするオブジェクト。
このアイデアは、データ構造のクラスを受講していて、リンク リストについて話したときに思いつきました。各リンクが衝突可能なオブジェクトで、既に作成されているゲーム オブジェクトをそこに貼り付けることができるとしたらどうでしょうか。次に、ゲーム オブジェクトが動き回ると、それらの位置の衝突をチェックする軽量な方法が得られます。こうして私のシステムが誕生しました。
実際には、ゲーム サイクルごと、または衝突のチェックを選択したときに起動するクラスだけです。プレイヤーの位置、弾丸の位置、または何かと衝突しているかどうかを確認したいオブジェクトを指定すると、衝突可能なすべてのオブジェクトの位置が検索され、それらが重なっているかどうかを確認するテストが実行されます。
2 番目の要素 (場所と象限) を追加すると、その真の効率が発揮されます。
たとえば、携帯電話の画面をパーツごとに分割し、プレーヤーまたは弾丸がどの象限にあるかを知っている場合、その象限内にある衝突可能なオブジェクトのリストのみをスキャンすることを選択できます。したがって、検索アルゴリズムを元のサイズの 4 分の 1 に削減します。
衝突を検出するには、さまざまな方法があります。これは、実際には正方形である 2 つの円の衝突を検出する方法を示すためにクラスで使用した簡単な例です。円の中心点の座標と半径を取得するだけでわかるように、斜辺を計算して、それらが接触している場所または接触しているかどうかを判断できます。
幸運を!ご不明な点がございましたら、お気軽にお問い合わせください。
この投稿の最後の返信が役立つ場合があります。シンプルな迷路です。迷路の構造は、パスまたは壁を示す 0、1 を含むデータ ファイルによって制御されます。矢印キーを使用して迷路を移動します。矢印キーが押されると、コードは次の正方形が壁ではないことを確認します。