LoginSignup
5
7

More than 5 years have passed since last update.

[Libgdx]当たり判定で使えそうなクラス

Last updated at Posted at 2015-03-22

まえがき

ゲームで衝突の検出しようと思った時、自作するのはバグとか怖いなぁっと。
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)

ドキュメント

Intersector (libgdx API)
Intersectorコード

5
7
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
7