新人研修の記録1
研修中に学んだ役立つ技術情報を書いていきたいと思います。
ゲームなどでも多用される図形の重なり判定、いわゆる当たり判定ですが、
研修でキャラクターAとキャラクターBの座標が一致したときにフラグを立てるといったようなプログラムを組む場面がありました。
方法としてはキャラクターAの座標を調べて、キャラクターBの座標に重なりがあればフラグを立てるといったアルゴリズムで組むことになります。
四角形の重なり判定は以下のようになります。
//図形が重なるとtrueを返す boolean checkX = false; //Y軸 return (checkX && checkY) |
うーん、見ずらい。可読性が悪い上に保守性も悪そう。。
そこで、intersects()という便利なメソッドがありました!
これを使えば以下のように簡単に書けてしまいます。
//図形が重なるとtrueを返す return Rect.intersects(r1, r2); |
intersects(Rect rect1, Rect rect2)はrect1とrect2に重なりがあればtrueを返すという構造なので、
様々な場面に応用できるのではないでしょうか。
ただ、高速にスワイプしたときは例外で、
指の取得座標の値が飛んでしまうことがあり(取得座標に連続性がない)、
重なり検出できない場合があることもわかりました。
今後はこのことも踏まえて上手に使用していきたいと思います。
火曜担当:Tamamo
admin at 2017年11月21日 10:00:42