Collision
2D & 3D collision detection — Rectangle, BoundingBox, Ray, sphere, line.
Collision reference
11 2D + 8 3D collision functions exposed as receiver methods on Rectangle, Vector2, Ray, BoundingBox, or via the Collision namespace for symmetric tests.
2D collision
Rectangle.collides(rect: Rectangle, other: Rectangle) -> Bool
Category: 2D · raylib: CheckCollisionRecs
Axis-aligned rect/rect overlap test. Workhorse for tile games, platformers, paddles.
if Rectangle.collides(paddle, ball) { -- reverse velocity }
raylib cheatsheet ·
Iron source ·
Test usage
Rectangle.intersection(rect: Rectangle, other: Rectangle) -> Rectangle
Category: 2D · raylib: GetCollisionRec
Overlap rectangle between two rects. Returns zero-sized rect if no overlap.
val overlap = Rectangle.intersection(paddle, ball)
raylib cheatsheet ·
Iron source ·
Test usage
Rectangle.contains_point(rect: Rectangle, point: Vector2) -> Bool
Category: 2D · raylib: CheckCollisionPointRec
Point-in-rectangle test. Common for mouse hover / click regions.
if Rectangle.contains_point(button, Mouse.get_position()) { -- hover }
raylib cheatsheet ·
Iron source ·
Test usage
Rectangle.collides_circle(rect: Rectangle, center: Vector2, radius: Float32) -> Bool
Category: 2D · raylib: CheckCollisionCircleRec
Circle-vs-rectangle overlap. Useful for circular hitboxes interacting with tile geometry.
if Rectangle.collides_circle(wall, ball_center, Float32(5.0)) { }
raylib cheatsheet ·
Iron source ·
Test usage
Vector2.inside_triangle(point: Vector2, p1, p2, p3: Vector2) -> Bool
Category: 2D · raylib: CheckCollisionPointTriangle
Point-in-triangle test.
if Vector2.inside_triangle(cursor, a, b, c) { }
raylib cheatsheet ·
Iron source ·
Test usage
Vector2.inside_polygon(point: Vector2, points: [Vector2]) -> Bool
Category: 2D · raylib: CheckCollisionPointPoly
Ray-casting point-in-polygon algorithm. Works for any simple polygon.
if Vector2.inside_polygon(cursor, hex_vertices) { }
raylib cheatsheet ·
Iron source ·
Test usage
Vector2.on_line(point: Vector2, p1, p2: Vector2, threshold: Int32) -> Bool
Category: 2D · raylib: CheckCollisionPointLine
Point-near-line-segment test. Threshold is pixel distance.
if Vector2.on_line(cursor, start, finish, Int32(5)) { }
raylib cheatsheet ·
Iron source ·
Test usage
Collision.circles(c1: Vector2, r1: Float32, c2: Vector2, r2: Float32) -> Bool
Category: 2D · raylib: CheckCollisionCircles
Circle-circle intersection test. Symmetric; uses Collision namespace.
if Collision.circles(a_pos, Float32(5.0), b_pos, Float32(5.0)) { }
raylib cheatsheet ·
Iron source ·
Test usage
Collision.circle_line(center: Vector2, radius: Float32, p1, p2: Vector2) -> Bool
Category: 2D · raylib: CheckCollisionCircleLine
Circle vs. line-segment intersection.
if Collision.circle_line(ball, Float32(5.0), wall_a, wall_b) { }
raylib cheatsheet ·
Iron source ·
Test usage
Collision.point_circle(point: Vector2, center: Vector2, radius: Float32) -> Bool
Category: 2D · raylib: CheckCollisionPointCircle
Point-in-circle test.
if Collision.point_circle(cursor, center, Float32(20.0)) { }
raylib cheatsheet ·
Iron source ·
Test usage
Collision.lines(start_a, end_a, start_b, end_b: Vector2) -> (Bool, Vector2)
Category: 2D · raylib: CheckCollisionLines
Line-segment vs line-segment intersection. Returns (hit, intersection-point).
val (hit, point) = Collision.lines(a1, a2, b1, b2)
raylib cheatsheet ·
Iron source ·
Test usage
3D collision
BoundingBox.collides(box: BoundingBox, other: BoundingBox) -> Bool
Category: 3D · raylib: CheckCollisionBoxes
AABB overlap. First-line broad-phase test for 3D worlds.
if BoundingBox.collides(player_bbox, enemy_bbox) { }
raylib cheatsheet ·
Iron source ·
Test usage
BoundingBox.collides_sphere(box: BoundingBox, center: Vector3, radius: Float32) -> Bool
Category: 3D · raylib: CheckCollisionBoxSphere
AABB vs sphere overlap.
if BoundingBox.collides_sphere(box, pos, Float32(1.0)) { }
raylib cheatsheet ·
Iron source ·
Test usage
Collision.spheres(c1: Vector3, r1: Float32, c2: Vector3, r2: Float32) -> Bool
Category: 3D · raylib: CheckCollisionSpheres
Sphere-sphere overlap.
if Collision.spheres(a_pos, Float32(1.0), b_pos, Float32(1.0)) { }
raylib cheatsheet ·
Iron source ·
Test usage
Ray.hit_sphere(ray: Ray, center: Vector3, radius: Float32) -> RayCollision
Category: 3D · raylib: GetRayCollisionSphere
Ray vs sphere intersection — RayCollision{ hit, distance, point, normal }.
val hit = Ray.hit_sphere(ray, enemy, Float32(1.0))
if hit.hit { }
raylib cheatsheet ·
Iron source ·
Test usage
Ray.hit_box(ray: Ray, box: BoundingBox) -> RayCollision
Category: 3D · raylib: GetRayCollisionBox
Ray vs axis-aligned bounding box.
val hit = Ray.hit_box(ray, Model.bounding_box(model))
raylib cheatsheet ·
Iron source ·
Test usage
Ray.hit_mesh(ray: Ray, mesh: Mesh, transform: Matrix) -> RayCollision
Category: 3D · raylib: GetRayCollisionMesh
Ray vs per-triangle mesh test with world transform. Expensive — usually gated on BBox test first.
val hit = Ray.hit_mesh(ray, mesh, Matrix.identity())
raylib cheatsheet ·
Iron source ·
Test usage
Ray.hit_triangle(ray: Ray, p1, p2, p3: Vector3) -> RayCollision
Category: 3D · raylib: GetRayCollisionTriangle
Ray vs triangle.
val hit = Ray.hit_triangle(ray, a, b, c)
raylib cheatsheet ·
Iron source ·
Test usage
Ray.hit_quad(ray: Ray, p1, p2, p3, p4: Vector3) -> RayCollision
Category: 3D · raylib: GetRayCollisionQuad
Ray vs quad (4 vertices). Raylib splits internally into two triangles.
val hit = Ray.hit_quad(ray, tl, tr, br, bl)
raylib cheatsheet ·
Iron source ·
Test usage
See also