#まえがき
ゲームで衝突の検出しようと思った時、自作するのはバグとか怖いなぁっと。
libgdxはゲームライブラリだから、衝突系の検出ライブラリーがあるはずだと思って、探した次第でございます。
もちろんStageのhitを使えば、画像サイズの四角はできるけど、例えば弾のような円の当たり判定はできないと思う。(知らないだけかも?)
衝突系のライブラリだけまとまったクラスを発見!!!
自分用メモにqiitaに書いておこう。
#Intersector
実際のメソッドで何かあるか、なんの引数を渡すかはドキュメントを参照。
Intersectorでできることを記述。
全部staticです。
##衝突系
- boolean isPointInTriangle (Vector3 point, Vector3 t1, Vector3 t2, Vector3 t3) : 点と三角形の当たり判定
- int pointLineSide(Vector2 linePoint1, Vector2 linePoint2, Vector2 point) : 点と線のどちら側にあるか(-1:左,0:右)
- boolean isPointInPolygon(Array polygon, Vector2 point) : 点と多角形の当たり判定
- boolean intersectSegmentCircle(Vector2 start, Vector2 end, Vector2 center, float squareRadius) : 線と円の当たり判定
- boolean intersectLines (Vector2 p1, Vector2 p2, Vector2 p3, Vector2 p4, Vector2 intersection) : 線と線の当たり判定(intersectionを渡すと交点座標が入る)
- boolean intersectLinePolygon (Vector2 p1, Vector2 p2, Polygon polygon) : 線とポリゴンの当たり判定
- boolean intersectRectangles (Rectangle rectangle1, Rectangle rectangle2, Rectangle intersection) : 四角と四角の当たり判定(intersectionに重なった範囲がセットされる)
- boolean intersectSegments (Vector2 p1, Vector2 p2, Vector2 p3, Vector2 p4, Vector2 intersection): Segment通しの当たり判定(あたった部分はintersectionにセットされる)
overlapシリーズ
衝突系のわかりやすく、直感的に扱える。intersectionがないので、重なったエリアがほしい場合は不向き。
- boolean overlaps (Circle c1, Circle c2) : 円と円の当たり判定
- boolean overlaps (Rectangle r1, Rectangle r2) : 四角と四角の当たり判定
- boolean overlaps (Circle c, Rectangle r) : 円と四角
- boolean overlapConvexPolygons (Polygon p1, Polygon p2) : ポリゴンとポリゴン
##処理系
- float distanceLinePoint(float startX, float startY, float endX, float endY, float pointX, float pointY) : 点と線との距離
- float distanceSegmentPoint(Vector2 start, Vector2 end, Vector2 point) : 点とSegmentとの距離
- Vector2 nearestSegmentPoint (Vector2 start, Vector2 end, Vector2 point, Vector2 nearest) : 点にもっと近い四角形(原文:Segment)の頂点座標
- boolean intersectSegmentPolygon(Vector2 p1, Vector2 p2, Polygon polygon):四角(原文Segment)とポリゴンの当たり判定
- float det (float a, float b, float c, float d):行列式
- double detd (double a, double b, double c, double d) :detのdouble版
##訳せなかったコメントのメソッド
- Ray系
- void splitTriangle (float[] triangle, Plane plane, SplitTriangle split)