🎨 Zeichnen & Primitives
Das Koordinatensystem
Arcade verwendet ein kartesisches Koordinatensystem mit dem Ursprung (0,0) unten links. X wächst nach rechts, Y wächst nach oben – anders als in vielen anderen Frameworks!
Gestrichelte Linien = x/y-Koordinaten der Punkte. Arcade: (0,0) = unten links!
Grundformen zeichnen
Arcade bietet viele eingebaute Zeichenfunktionen. Alle werden innerhalb von on_draw() aufgerufen.
def on_draw(self):
self.clear()
# Kreis (ausgefüllt)
arcade.draw_circle_filled(
center_x=200, center_y=300,
radius=50,
color=arcade.color.RED
)
# Kreis (nur Umriss)
arcade.draw_circle_outline(
center_x=350, center_y=300,
radius=50, color=arcade.color.BLUE,
border_width=3
)
# Rechteck (ausgefüllt)
arcade.draw_lbwh_rectangle_filled(
left=50, bottom=100,
width=150, height=80,
color=arcade.color.GREEN
)
# Linie
arcade.draw_line(
start_x=0, start_y=0,
end_x=800, end_y=600,
color=arcade.color.WHITE,
line_width=2
)
# Dreieck
arcade.draw_triangle_filled(
x1=400, y1=200,
x2=350, y2=100,
x3=450, y3=100,
color=arcade.color.YELLOW
)
# Ellipse
arcade.draw_ellipse_filled(
center_x=600, center_y=300,
width=100, height=60,
color=arcade.color.PURPLE
)
# Polygon
arcade.draw_polygon_filled(
point_list=[(100,500), (200,550), (150,450)],
color=arcade.color.CYAN
)
| Funktion | Parameter | Beschreibung |
|---|---|---|
| draw_circle_filled() | cx, cy, radius, color | Ausgefüllter Kreis |
| draw_circle_outline() | cx, cy, radius, color, border_width | Kreis-Umriss |
| draw_lbwh_rectangle_filled() | left, bottom, width, height, color | Rechteck (l/b/w/h) |
| draw_lrbt_rectangle_filled() | left, right, bottom, top, color | Rechteck (Kanten) |
| draw_line() | x1, y1, x2, y2, color, width | Linie |
| draw_triangle_filled() | x1,y1, x2,y2, x3,y3, color | Dreieck |
| draw_ellipse_filled() | cx, cy, width, height, color | Ellipse |
| draw_polygon_filled() | point_list, color | Beliebiges Polygon |
| draw_arc_filled() | cx, cy, w, h, color, start_a, end_a | Bogen/Arc |
| draw_parabola_filled() | sl, sc, el, depth, color | Parabel |
Farben in Arcade
Arcade bietet mehrere Möglichkeiten, Farben anzugeben:
# 1. Vordefinierte Farben (über 300 Farbnamen!)
arcade.color.RED # (255, 0, 0)
arcade.color.AMAZON # (59, 122, 87)
arcade.color.CYBER_GRAPE # (88, 66, 124)
# 2. RGB-Tupel
color = (255, 128, 0) # Orange
# 3. RGBA-Tupel (mit Transparenz)
color = (255, 0, 0, 128) # Halbtransparentes Rot
# 4. Hex-String
color = "#FF8800"
# 5. arcade.types.Color
color = arcade.types.Color(255, 200, 0, 255)
# Hintergrundfarbe setzen
arcade.set_background_color(arcade.color.DARK_BLUE_GRAY)
self.background_color = arcade.color.BLACK
Primärfarben
RED, GREEN, BLUE, YELLOW, CYAN, MAGENTA, WHITE, BLACK
Naturfarben
AMAZON, FOREST_GREEN, SKY_BLUE, SAND, BROWN, EARTH
Cool Colors
CYBER_GRAPE, ELECTRIC_BLUE, NEON_GREEN, HOT_MAGENTA
Text zeichnen
Arcade bietet zwei Wege für Text: die einfache draw_text() Funktion und das leistungsstarke arcade.Text-Objekt.
# Einfaches Text zeichnen
arcade.draw_text(
text="Score: 1337",
start_x=10, start_y=580,
color=arcade.color.WHITE,
font_size=20,
font_name="Arial",
bold=True
)
# Leistungsstarkes Text-Objekt (empfohlen für sich oft ändernde Texte)
self.score_text = arcade.Text(
text="Score: 0",
start_x=10, start_y=580,
color=arcade.color.WHITE,
font_size=20
)
# In on_update() Text aktualisieren
self.score_text.text = f"Score: {self.score}"
# In on_draw() zeichnen
self.score_text.draw()
# Ausrichtung
arcade.draw_text(
"Zentriert!", 400, 300,
arcade.color.YELLOW, 30,
anchor_x="center", # "left" | "center" | "right"
anchor_y="center"
)
arcade.Text-Objekt ist performanter als wiederholte draw_text()-Aufrufe, da es den Text intern als Textur cached. Ideal für sich ändernde Anzeigen wie Score, Timer, usw.
ShapeElementLists – Batch Drawing
Wenn viele statische Formen gezeichnet werden müssen, sind ShapeElementLists deutlich schneller als einzelne draw-Aufrufe.
def setup(self):
# Batch-Liste erstellen
self.shape_list = arcade.shape_list.ShapeElementList()
# Formen zur Liste hinzufügen
rect = arcade.shape_list.create_rectangle_filled(
200, 200, 100, 50, arcade.color.BLUE
)
self.shape_list.append(rect)
circle = arcade.shape_list.create_ellipse_filled(
400, 300, 80, 60, arcade.color.RED
)
self.shape_list.append(circle)
# Linie mit Farbe
line = arcade.shape_list.create_line(
0, 0, 800, 600, arcade.color.WHITE, 2
)
self.shape_list.append(line)
def on_draw(self):
self.clear()
# Alle Formen in einem GPU-Aufruf zeichnen!
self.shape_list.draw()