3.2 アクションゲームの当たり判定

3.2
アクションゲームの当たり判定
抗力!抗力!
今回作る当たり判定
今回はアクションゲームの当たり判定
►矩形×矩形の当たり判定が基本
(もうちょっと色々選択肢がある)
※矩形とは長方形のこと
重なっているので
当たり
3.2 アクションゲームの当たり判定
2
なぜ矩形×矩形を使うのか
アクションでは地形との当たり判定が多い
►地面が丸くては困るので矩形を使う
3.2 アクションゲームの当たり判定
3
当たり判定構造体の設計
平面上に矩形を定義するのに必要な変数は…
►座標
►大きさ
構造体に必要な関数は…
►当たり判定の実行
こうなる
struct
COLLISION
POINT
location
SIZE
size
bool
isHit(COLLISION)
3.2 アクションゲームの当たり判定
4
判定関数の実装
2つの矩形が重なっているかどうか調べるには?
►単純に座標を比較すれば良い
A.height/2
B.x – B.width/2 – A.width/2 < A.x
かつ
A.x < B.x + B.width/2 + A.width/2
B
かつ
A
B.y – B.height/2 – A.height/2 < A.y
かつ
A.y < B.y + B.height/2 + A.height/2
ならば、AとBは重なっている
A.width/2
(※スペースの都合でlocationやsizeを省略しています)
Aが赤いゾーン内ならいつも重なっている
3.2 アクションゲームの当たり判定
5
シューティングゲームとの違い
シューティングでは通常、当たり=消失
►アイテムは取ったら消える
►弾は当たったら消える
►めり込むとか関係ない
アクションゲームでは?
►地面に当たったら止まる
►壁に当たったら止まる
►めり込んだらバレる
3.2 アクションゲームの当たり判定
6
めり込みとは
めり込んだ
めり込んでない
1フレームで何ピクセルも移動する
→めり込みはよく起こる
3.2 アクションゲームの当たり判定
7
めり込みを防ぐために
どうやって意図的に
ピッタリで止めるか
ピッタリの場所を計算するのは実は大変
►よく考えると計算途中は画面に表示されない
►じゃあ移動してみてから考えよう
めり込んでから調整してみよう
3.2 アクションゲームの当たり判定
8
素朴で確実
めり込んでから調整する
3.2 アクションゲームの当たり判定
9
動作イメージ
最初の状態
かべ
プレイヤー
3.2 アクションゲームの当たり判定
10
動作イメージ
一旦めり込む
かべ
これだけ分めり込んだ
プレイヤー
当たり判定が発生
3.2 アクションゲームの当たり判定
11
動作イメージ
押し戻す
かべ
めり込んだ分押し戻す
プレイヤー
3.2 アクションゲームの当たり判定
12
考慮すべき問題
かべ
プレイヤー
こうなってしまった時
どちらに押し戻すべきか
かべ
かべ
修正距離が短いので
こっちが妥当
(※ゲーム内容によります)
プレイヤー
プレイヤー
3.2 アクションゲームの当たり判定
13
実装
サンプルで
一緒に見てみよう
(※後日ちゃんとしたやつを作るので許してください><)
3.2 アクションゲームの当たり判定
14