複雑な形の当たり判定(2D)

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
アバター
namachan10777
記事: 32
登録日時: 10年前
住所: 四国
連絡を取る:

複雑な形の当たり判定(2D)

#1

投稿記事 by namachan10777 » 9年前

現在海を舞台にしたアクションゲームを制作しようとしていて、下のような複雑な形の島と円形の当たり判定を持つ自機との間で衝突判定を行いたいのですが、皆さんはどのようにしているのか知りたいです。
僕は三角形を組み合わせて島の形を作り、三角形と自機の間で衝突判定を行う方法を思いついたのですが、三角形と円の間の衝突判定は計算コストが高いようなので、どのようにすればいいかと思いました。
よろしくお願いします。
画像
D言語!D言語!

アバター
usao
記事: 1889
登録日時: 12年前
連絡を取る:

Re: 複雑な形の当たり判定(2D)

#2

投稿記事 by usao » 9年前

こういう方法を用いることが可能な状況なのかどうかわかりませんが…
当たり判定のマスク画像みたいなのを用意するのはどうでしょうか.

例えば,「マップ全域の広さ」が(用途上十分な解像度の)ピクセル換算では W*H だとすれば…

[前処理]
・W*Hのマスク画像を用意する
・マスク画像全体を0で初期化
・島の外周上の全点について,
 その点を中心とし,半径が自機の当たり判定円の半径と等しい円
 をマスク画像に0ではない値で塗りつぶし描画する
・(必要があるなら島の内部領域も塗りつぶしておく)

[当たり判定の処理]
・自機の(当たり判定円の)中心位置に相当するマスク画像の画素の値を確認する.
 値が0であれば,島と当たってない.0でないなら当たっている

…みたいな.
HitMask.png
HitMask.png (7.28 KiB) 閲覧数: 3076 回

アバター
namachan10777
記事: 32
登録日時: 10年前
住所: 四国
連絡を取る:

Re: 複雑な形の当たり判定(2D)

#3

投稿記事 by namachan10777 » 9年前

その方法は思いつきませんでした。
ありがとうございます。
D言語!D言語!

閉鎖

“C言語何でも質問掲示板” へ戻る