Skip to main content

Overview

Shapes functions provide 2D primitive drawing capabilities including rectangles, circles, lines, triangles, and polygons.

Pixel and Line Drawing

drawPixel

Draws a pixel.
posX
Number
required
X position
posY
Number
required
Y position
color
Color
required
Pixel color
Raylib.drawPixel(100, 100, Color.Red)

drawPixelV

Draws a pixel using a Vector2.
position
Vector2
required
Pixel position
color
Color
required
Pixel color
Raylib.drawPixelV(Vector2.new(100, 100), Color.Red)

drawLine

Draws a line.
startPosX
Number
required
Start X position
startPosY
Number
required
Start Y position
endPosX
Number
required
End X position
endPosY
Number
required
End Y position
color
Color
required
Line color
import "raylib" for Raylib, Color

Raylib.initWindow(800, 450, "Shapes Example")

while (!Raylib.windowShouldClose()) {
  Raylib.beginDrawing()
  Raylib.clearBackground(Color.RayWhite)
  
  // Draw horizontal line
  Raylib.drawLine(100, 100, 700, 100, Color.Black)
  
  // Draw vertical line
  Raylib.drawLine(400, 50, 400, 400, Color.Blue)
  
  Raylib.endDrawing()
}

drawLineV

Draws a line using Vector2 points.
startPos
Vector2
required
Start position
endPos
Vector2
required
End position
color
Color
required
Line color
var start = Vector2.new(100, 100)
var end = Vector2.new(200, 200)
Raylib.drawLineV(start, end, Color.Red)

drawLineEx

Draws a line with thickness.
startPos
Vector2
required
Start position
endPos
Vector2
required
End position
thick
Number
required
Line thickness
color
Color
required
Line color
var start = Vector2.new(100, 100)
var end = Vector2.new(200, 200)
Raylib.drawLineEx(start, end, 5.0, Color.Red)  // 5 pixels thick

drawLineBezier

Draws a cubic Bezier line.
startPos
Vector2
required
Start position
endPos
Vector2
required
End position
thick
Number
required
Line thickness
color
Color
required
Line color
Raylib.drawLineBezier(Vector2.new(100, 200), Vector2.new(700, 200), 3.0, Color.Purple)

Circle Drawing

drawCircle

Draws a filled circle.
centerX
Number
required
Center X position
centerY
Number
required
Center Y position
radius
Number
required
Circle radius
color
Color
required
Circle color
Raylib.drawCircle(400, 225, 50, Color.Red)

drawCircleV

Draws a circle using Vector2 for center.
center
Vector2
required
Circle center
radius
Number
required
Circle radius
color
Color
required
Circle color
var center = Vector2.new(400, 225)
Raylib.drawCircleV(center, 50, Color.Blue)

drawCircleLines

Draws circle outline.
centerX
Number
required
Center X
centerY
Number
required
Center Y
radius
Number
required
Circle radius
color
Color
required
Outline color
Raylib.drawCircleLines(400, 225, 50, Color.DarkBlue)

drawCircleGradient

Draws a gradient-filled circle.
centerX
Number
required
Center X
centerY
Number
required
Center Y
radius
Number
required
Circle radius
color1
Color
required
Center color
color2
Color
required
Edge color
Raylib.drawCircleGradient(400, 225, 60, Color.Green, Color.SkyBlue)

Rectangle Drawing

drawRectangle

Draws a filled rectangle.
posX
Number
required
X position
posY
Number
required
Y position
width
Number
required
Rectangle width
height
Number
required
Rectangle height
color
Color
required
Rectangle color
import "raylib" for Raylib, Color

var screenWidth = 800
var screenHeight = 450

Raylib.initWindow(screenWidth, screenHeight, "Rectangles")

while (!Raylib.windowShouldClose()) {
  Raylib.beginDrawing()
  Raylib.clearBackground(Color.RayWhite)
  
  // Draw filled rectangle
  Raylib.drawRectangle(100, 100, 200, 150, Color.Red)
  
  // Draw rectangle outline
  Raylib.drawRectangleLines(350, 100, 200, 150, Color.Blue)
  
  Raylib.endDrawing()
}

drawRectangleV

Draws rectangle using Vector2 for position and size.
position
Vector2
required
Position
size
Vector2
required
Size
color
Color
required
Rectangle color
var pos = Vector2.new(100, 100)
var size = Vector2.new(200, 150)
Raylib.drawRectangleV(pos, size, Color.Purple)

drawRectangleRec

Draws rectangle using Rectangle struct.
rec
Rectangle
required
Rectangle to draw
color
Color
required
Rectangle color
import "raylib" for Raylib, Rectangle, Color

var player = Rectangle.new(400, 280, 40, 40)
Raylib.drawRectangleRec(player, Color.Red)

drawRectanglePro

Draws rectangle with origin and rotation.
rec
Rectangle
required
Rectangle
origin
Vector2
required
Rotation origin
rotation
Number
required
Rotation in degrees
color
Color
required
Rectangle color
var rec = Rectangle.new(400, 225, 100, 60)
var origin = Vector2.new(50, 30)  // Center of rectangle
var rotation = 45.0
Raylib.drawRectanglePro(rec, origin, rotation, Color.Green)

drawRectangleGradientV

Draws vertical gradient-filled rectangle.
posX
Number
required
X position
posY
Number
required
Y position
width
Number
required
Width
height
Number
required
Height
color1
Color
required
Top color
color2
Color
required
Bottom color
Raylib.drawRectangleGradientV(100, 100, 200, 150, Color.Maroon, Color.Gold)

drawRectangleGradientH

Draws horizontal gradient-filled rectangle.
posX
Number
required
X position
posY
Number
required
Y position
width
Number
required
Width
height
Number
required
Height
color1
Color
required
Left color
color2
Color
required
Right color
Raylib.drawRectangleGradientH(100, 100, 200, 150, Color.Blue, Color.Yellow)

drawRectangleLines

Draws rectangle outline.
posX
Number
required
X position
posY
Number
required
Y position
width
Number
required
Width
height
Number
required
Height
color
Color
required
Outline color
Raylib.drawRectangleLines(100, 100, 200, 150, Color.Orange)

drawRectangleRounded

Draws rectangle with rounded corners.
rec
Rectangle
required
Rectangle
roundness
Number
required
Corner roundness (0.0 to 1.0)
segments
Number
required
Number of segments per corner
color
Color
required
Rectangle color
var rec = Rectangle.new(100, 100, 200, 150)
Raylib.drawRectangleRounded(rec, 0.3, 8, Color.SkyBlue)

Triangle Drawing

drawTriangle

Draws a filled triangle.
v1
Vector2
required
First vertex
v2
Vector2
required
Second vertex
v3
Vector2
required
Third vertex
color
Color
required
Triangle color
var v1 = Vector2.new(400, 100)
var v2 = Vector2.new(300, 250)
var v3 = Vector2.new(500, 250)
Raylib.drawTriangle(v1, v2, v3, Color.Violet)

drawTriangleLines

Draws triangle outline.
v1
Vector2
required
First vertex
v2
Vector2
required
Second vertex
v3
Vector2
required
Third vertex
color
Color
required
Outline color
Raylib.drawTriangleLines(v1, v2, v3, Color.DarkBlue)

Polygon Drawing

drawPoly

Draws a regular polygon.
center
Vector2
required
Polygon center
sides
Number
required
Number of sides
radius
Number
required
Polygon radius
rotation
Number
required
Rotation in degrees
color
Color
required
Polygon color
var rotation = 0.0

while (!Raylib.windowShouldClose()) {
  rotation = rotation + 0.2
  
  Raylib.beginDrawing()
  Raylib.clearBackground(Color.RayWhite)
  
  // Draw hexagon
  Raylib.drawPoly(Vector2.new(400, 225), 6, 80, rotation, Color.Brown)
  
  Raylib.endDrawing()
}

drawPolyLines

Draws polygon outline.
center
Vector2
required
Polygon center
sides
Number
required
Number of sides
radius
Number
required
Polygon radius
rotation
Number
required
Rotation in degrees
color
Color
required
Outline color
Raylib.drawPolyLines(Vector2.new(400, 225), 6, 90, rotation, Color.Brown)

Collision Detection

checkCollisionRecs

Checks collision between two rectangles.
rec1
Rectangle
required
First rectangle
rec2
Rectangle
required
Second rectangle
Returns: Boolean - True if collision detected
var player = Rectangle.new(100, 100, 40, 40)
var wall = Rectangle.new(200, 100, 50, 100)

if (Raylib.checkCollisionRecs(player, wall)) {
  System.print("Collision!")
}

checkCollisionCircles

Checks collision between two circles.
center1
Vector2
required
First circle center
radius1
Number
required
First circle radius
center2
Vector2
required
Second circle center
radius2
Number
required
Second circle radius
Returns: Boolean - True if collision detected
var player = Vector2.new(100, 100)
var enemy = Vector2.new(150, 150)

if (Raylib.checkCollisionCircles(player, 20, enemy, 20)) {
  System.print("Hit!")
}

checkCollisionCircleRec

Checks collision between circle and rectangle.
center
Vector2
required
Circle center
radius
Number
required
Circle radius
rec
Rectangle
required
Rectangle
Returns: Boolean - True if collision detected

checkCollisionPointRec

Checks if point is inside rectangle.
point
Vector2
required
Point to check
rec
Rectangle
required
Rectangle
Returns: Boolean - True if point is inside
var mousePos = Raylib.getMousePosition()
var button = Rectangle.new(100, 100, 200, 50)

if (Raylib.checkCollisionPointRec(mousePos, button)) {
  // Mouse is over button
}

checkCollisionPointCircle

Checks if point is inside circle.
point
Vector2
required
Point to check
center
Vector2
required
Circle center
radius
Number
required
Circle radius
Returns: Boolean - True if point is inside

Best Practices

Use drawRectangleRec() with Rectangle structs for cleaner code when working with many rectangles.
Collision detection functions are very efficient for basic 2D games. Use them for simple AABB collision before implementing more complex systems.

Build docs developers (and LLMs) love