Willkommen zu Ihrem ersten großen Spielentwicklungsprojekt! In diesem Tutorial führen wir Sie Schritt für Schritt durch die Erstellung einer Pong AI, die nahezu unschlagbar ist. Wir verwenden die Godot Engine und die Skriptsprache GDScript, was dieses Projekt perfekt für Anfänger macht, die in die Welt der Spielprogrammierung einsteigen möchten.
Was ist Pong und warum ist es ein gutes Anfängerprojekt?
Pong ist ein Arcade-Klassiker, der für seine Einfachheit und sein fesselndes Gameplay bekannt ist. Es besteht aus zwei Schlägern, die von Spielern gesteuert werden (oder in unserem Fall von einem Spieler und einer KI), und einem Ball, der zwischen ihnen hin und her springt. Das Ziel ist es, den Ball am gegnerischen Schläger vorbeizuschießen, um einen Punkt zu erzielen.
Pong eignet sich hervorragend für Anfängerprojekte, weil es die grundlegenden Konzepte der Spielentwicklung wie Bewegung, Kollisionserkennung und einfache künstliche Intelligenz umfasst, ohne zu überwältigend zu sein. Außerdem ist es relativ einfach zu debuggen und zu erweitern.
Voraussetzungen
Bevor wir beginnen, stellen Sie sicher, dass Sie Folgendes haben:
- Godot Engine: Laden Sie die neueste stabile Version von der offiziellen Godot-Website herunter.
- Grundkenntnisse in der Godot Engine-Oberfläche: Machen Sie sich mit dem Editor, dem Szenenbaum und dem Inspektor vertraut.
- Grundkenntnisse in GDScript: Sie sollten die Grundlagen von Variablen, Funktionen und Kontrollstrukturen verstehen.
Projekt einrichten
- Neues Projekt erstellen: Öffnen Sie Godot und erstellen Sie ein neues 2D-Projekt. Geben Sie ihm einen Namen (z. B. „PongAI”) und wählen Sie einen geeigneten Speicherort.
- Szene erstellen: Erstellen Sie eine neue 2D-Szene (Node2D) und benennen Sie sie „Main”. Dies wird unsere Hauptspielszene sein.
- Hintergrund hinzufügen: Fügen Sie einen ColorRect-Knoten als Kind von „Main” hinzu. Benennen Sie ihn in „Background” um. Stellen Sie seine Größe auf die Fenstergröße ein (z. B. 1280×720) und wählen Sie im Inspektor eine dunkle Hintergrundfarbe.
Die Schläger erstellen
- Player Paddle erstellen: Erstellen Sie einen KinematicBody2D-Knoten und benennen Sie ihn in „PlayerPaddle” um. Fügen Sie ihm ein CollisionShape2D und ein Sprite als Kinder hinzu.
- Shape und Sprite konfigurieren: Wählen Sie für CollisionShape2D eine RectangleShape2D. Passen Sie die Größe des Rechtecks an (z. B. 20×100). Für das Sprite wählen Sie eine weiße Textur (oder eine andere Textur Ihrer Wahl). Passen Sie die Größe und Position des Sprites an, um es mit der Kollisionsform abzugleichen.
- AI Paddle erstellen: Erstellen Sie eine weitere KinematicBody2D-Szene ähnlich der „PlayerPaddle” und nennen Sie sie „AIPaddle”. Konfigurieren Sie CollisionShape2D und Sprite auf ähnliche Weise.
Den Ball erstellen
- Ball erstellen: Erstellen Sie einen RigidBody2D-Knoten und benennen Sie ihn in „Ball” um. Fügen Sie ihm ein CollisionShape2D und ein Sprite hinzu.
- Shape und Sprite konfigurieren: Wählen Sie für CollisionShape2D eine CircleShape2D. Passen Sie den Radius des Kreises an (z. B. 10). Wählen Sie für das Sprite eine weiße Textur (oder eine andere Textur Ihrer Wahl). Passen Sie die Größe und Position des Sprites an, um es mit der Kollisionsform abzugleichen.
GDScript Programmierung: Die Grundlagen
Jetzt kommt der spaßige Teil: das Schreiben von Code! Wir werden GDScript verwenden, um das Verhalten unserer Schläger und des Balls zu programmieren.
PlayerPaddle-Skript
- Skript erstellen: Wählen Sie den Knoten „PlayerPaddle” aus und erstellen Sie im Inspektor ein neues Skript. Nennen Sie es „PlayerPaddle.gd”.
- Code hinzufügen: Fügen Sie den folgenden Code zum Skript hinzu:
„`gdscript
extends KinematicBody2D
var speed = 400 # Geschwindigkeit des Schlägers
var screen_height = 720 # Höhe des Bildschirms
func _physics_process(delta):
var velocity = Vector2(0, 0)
if Input.is_action_pressed(„ui_up”):
velocity.y -= 1
if Input.is_action_pressed(„ui_down”):
velocity.y += 1
velocity = velocity.normalized() * speed
position.y = clamp(position.y + velocity.y * delta, 0 + (rect_size().y / 2), screen_height – (rect_size().y / 2) )
#move_and_slide(velocity) #Nicht mehr nötig, da wir clamp nutzen und position direkt setzen.
„`
Dieser Code bewegt den Spielerschläger basierend auf den Pfeiltasten nach oben und unten und verhindert, dass er den Bildschirm verlässt.
AIPaddle-Skript: Die unschlagbare AI
- Skript erstellen: Wählen Sie den Knoten „AIPaddle” aus und erstellen Sie im Inspektor ein neues Skript. Nennen Sie es „AIPaddle.gd”.
- Code hinzufügen: Fügen Sie den folgenden Code zum Skript hinzu:
„`gdscript
extends KinematicBody2D
export var speed = 300 # Geschwindigkeit des KI-Schlägers
onready var ball = get_node(„../Ball”) # Referenz zum Ball
var screen_height = 720 # Höhe des Bildschirms
func _physics_process(delta):
if ball != null:
# KI folgt dem Ball
position.y = lerp(position.y, ball.position.y, 0.1)
position.y = clamp(position.y, 0 + (rect_size().y / 2), screen_height – (rect_size().y / 2) )
func rect_size():
return get_node(„Sprite”).texture.get_size()
„`
Dieser Code bewirkt, dass die KI den Ball kontinuierlich verfolgt. Die `lerp`-Funktion sorgt für eine sanfte Bewegung, anstatt sofort zum Ball zu springen. Der Code stellt auch sicher, dass der KI-Schläger nicht den Bildschirm verlässt.
Ball-Skript
- Skript erstellen: Wählen Sie den Knoten „Ball” aus und erstellen Sie im Inspektor ein neues Skript. Nennen Sie es „Ball.gd”.
- Code hinzufügen: Fügen Sie den folgenden Code zum Skript hinzu:
„`gdscript
extends RigidBody2D
var speed = 400
var initial_direction = Vector2(1, 0).rotated(randf_range(-PI/4, PI/4)) # Zufällige Richtung beim Start
func _ready():
linear_velocity = initial_direction * speed
func _integrate_forces(state):
state.linear_velocity = state.linear_velocity.normalized() * speed
func _on_VisibilityNotifier2D_screen_exited():
queue_free() #Löschen wenn der Bildschirm verlassen wird. Später Score hinzufügen.
„`
Dieser Code initialisiert die Ballbewegung und die Kollisionserkennung. Der Ball bewegt sich zu Beginn mit einer zufälligen Abweichung nach rechts. Die `_integrate_forces` Funktion sorgt dafür, dass der Ball immer die gleiche Geschwindigkeit hat, egal wie oft er abprallt. Wenn der Ball den Bildschirm verlässt, wird er gelöscht.
Kollisionserkennung
Um eine Kollisionserkennung zwischen dem Ball und den Schlägern zu gewährleisten, müssen Sie CollisionShape2D in den Schlägern und dem Ball verwenden. Godot kümmert sich automatisch um die Kollisionserkennung, da wir KinematicBody2D (für die Schläger) und RigidBody2D (für den Ball) verwenden.
Letzte Schritte
- Instanzen der Schläger und des Balls in der Main-Szene: Fügen Sie Instanzen der „PlayerPaddle”-Szene, der „AIPaddle”-Szene und der „Ball”-Szene zur „Main”-Szene hinzu. Positionieren Sie sie entsprechend.
- Positionen anpassen: Positionieren Sie die Schläger auf der linken und rechten Seite des Bildschirms. Positionieren Sie den Ball in der Mitte.
- Testen: Führen Sie die Szene aus. Sie sollten jetzt einen funktionierenden Pong-Klon haben!
Verbesserungen und Erweiterungen
Herzlichen Glückwunsch! Sie haben eine funktionierende Pong-AI erstellt. Hier sind einige Ideen, wie Sie das Spiel weiter verbessern können:
- Punktesystem: Implementieren Sie ein Punktesystem, das die Punkte beider Spieler verfolgt.
- Soundeffekte: Fügen Sie Soundeffekte für das Schlagen des Balls hinzu.
- Schwierigkeitsgrade: Implementieren Sie verschiedene Schwierigkeitsgrade für die AI-Paddle.
- Menü: Erstellen Sie ein Menü zum Starten des Spiels und zum Einstellen von Optionen.
- Power-Ups: Fügen Sie Power-Ups hinzu, die das Spiel verändern.
Fazit
Dieses Tutorial hat Ihnen die Grundlagen der Erstellung eines Pong-Spiels mit Godot Engine und GDScript vermittelt. Sie haben gelernt, wie Sie Szenen erstellen, Objekte bewegen, Kollisionserkennung implementieren und eine einfache KI programmieren. Mit diesem Wissen können Sie nun komplexere Spiele entwickeln und Ihre Fähigkeiten in der Spielentwicklung weiter ausbauen. Viel Erfolg!