Baue dein eigenes Spaceshooter-Spiel mit GameMaker
Schritt für Schritt, ganz ohne Drag & Drop
- 1. Flieg los – mit Bewegung & Rotation
- 2. Mach’s kaputt – zerstöre Felsen mit Lasern
- 3. Loop it! – Game Over, Neustart & Score
1. Neues Projekt anlegen
Starte GameMaker und klick oben im Startscreen auf New.
Wähle das Template SHOOTER. Das bringt schon alle Bilder mit, die du brauchst – praktisch!
Wähle GML Code (wir coden alles selbst)

Gib deinem Spiel einen Namen – z. B. ship_go_brr – und klick auf Let’s Go!.
Jetzt öffnet sich der Editor. Auf der rechten Seite findest du den Asset Browser – dein Werkzeugkoffer für alles im Spiel:

Hier sind schon ein paar Sprites dabei – also Bilder für deine Objekte:
spr_player
– dein Raumschiffspr_bullet
– dein Laserschussspr_rock_big
– großer Asteroidspr_rock_small
– kleiner Asteroid
Weiter geht’s – jetzt bauen wir eigene Objekte mit diesen Bildern. 🚀
2. Objekte anlegen & bearbeiten
Sprites sind hübsch, aber ohne Objekte passiert nichts. Ein Objekt ist wie ein Schauspieler im Spiel – mit Verhalten, Aussehen und manchmal Spezialeffekten.
Das erste Objekt: dein Raumschiff
- Rechtsklick im Objects-Ordner → Create → Object
- Benenne es um in
obj_player


Sprite zuweisen
Doppelklick auf obj_player
, um den Objekt-Editor zu öffnen. Dort steht oben: No
Sprite.
Klick drauf und wähle spr_player
– so bekommt dein Raumschiff ein Gesicht. ✨

Weitere Spielobjekte
Erstelle nun drei weitere Objekte auf die gleiche Weise:
obj_bullet
– der Laserschuss
→ Sprite:spr_bullet
obj_rock
– der Asteroid
→ Sprite:spr_rock_big
obj_game
– das unsichtbare Steuerobjekt
→ Kein Sprite nötig!

Jetzt hast du alle Spielobjekte an Bord – Zeit, sie auf die Bühne zu schicken!
3. Level erstellen & Objekte platzieren
In GameMaker heißt ein Level Room – und davon gibt’s schon einen:
Room1
.
Den nutzen wir gleich als Spielfeld.
Room öffnen
Doppelklick auf Room1
im Asset Browser – damit öffnet sich der Room
Editor.

Größe festlegen
Links unten findest du das Fenster Inspector. Dort stellst du Width und
Height auf 1000
.
Ergebnis: ein quadratisches Spielfeld mit viel Platz zum Fliegen. 🚀

Layer verstehen
Im Room Editor siehst du zwei Ebenen:
- Instances: Hier kommen deine Objekte rein (Spieler, Felsen usw.)
- Background: Für Hintergründe – nutzen wir hier nicht

Spieler platzieren
Klick auf den Instances-Layer. Dann ziehst du obj_player
aus dem Asset Browser
in
den Raum.

Asteroiden hinzufügen
Zieh obj_rock
etwa 5–6 Mal an verschiedene Stellen im Raum.
Das sind deine ersten Hindernisse – bereit, später zerstört zu werden. 💥

🎭 Bühne frei – deine Objekte stehen bereit. Als Nächstes bringen wir Bewegung ins Spiel!
4. Spielerbewegung programmieren
Was macht das Step-Event?
In GameMaker laufen Objekte über sogenannte Events – das sind wie kleine Bühnenstücke, die bei bestimmten Momenten abgespielt werden.
Das Step-Event ist dein Dauerbrenner: Es wird etwa 60-mal pro Sekunde aufgerufen – ideal, um Bewegungen und Eingaben zu steuern.
1. Step-Event anlegen
- Öffne
obj_player
mit Doppelklick im Asset Browser - Klick auf Add Event → Step → Step

2. Bewegungscode einfügen
Füge diesen Code ins neue Step-Event ein:
// vorwärts bewegen
if keyboard_check(vk_up) {
motion_add(image_angle, 0.1);
}
// drehen
if keyboard_check(vk_left) image_angle += 4;
if keyboard_check(vk_right) image_angle -= 4;

Damit steuerst du dein Raumschiff wie in Asteroids:
- ⬆ beschleunigt in Flugrichtung
- ⬅/➡ drehen dein Schiff

0.1
ist deine Schubkraft – mach sie höher für mehr Speed!
3. Bildschirmränder überspringen (Wrap)
Was tun, wenn du aus dem Bild fliegst? Richtig – du kommst einfach auf der anderen Seite wieder rein. Das nennt man Wrapping.
Füge ganz am Ende deines Step-Events (außerhalb aller if
-Blöcke) das hier ein:
move_wrap(true, true, 0);
true, true
: Aktiviert horizontalen und vertikalen Wrap0
: Kein Rand – wrap sofort, wenn du draußen bist

Und voilà: Dein Raumschiff ist jetzt steuerbar – inklusive realistischer Steuerung und endlosem Raumflug!
5. Laserschüsse programmieren
Wir brauchen Feuerkraft!
Dein Raumschiff fliegt – aber was wäre ein Space Shooter ohne Laser?
Dafür nutzen wir obj_bullet
. Jedes Mal, wenn du klickst, feuert dein Schiff einen Schuss
ab.
1. Klick erkennt Schuss
Füge im Step-Event von obj_player
diesen Code ein:
if mouse_check_button_pressed(mb_left) {
instance_create_layer(x, y, "Instances", obj_bullet);
}

Dieser Code bedeutet:
- 🖱 Wenn du die linke Maustaste einmal klickst ...
- 🚀 ... erscheint ein
obj_bullet
direkt bei deinem Schiff - 📦 Es wird auf die
Instances
-Ebene gelegt – dort lebt der ganze Spielkram
mouse_check_button_pressed()
prüft auf einzelne Klicks
–
kein Dauerfeuer!
2. Bullet startet mit Schub
Öffne obj_bullet
und füge ein Create-Event hinzu. Dort kommt dieser
Code
rein:
speed = 10;
direction = obj_player.image_angle;

Damit fliegt der Schuss:
- 🚄 Mit Tempo
10
– du kannst es bei Bedarf erhöhen - 📍 In die Richtung, in die das Schiff aktuell zeigt
3. Und ... weg damit!
Damit die Projektile nicht ewig im All umhergeistern, zerstören wir sie automatisch, sobald sie den Raum verlassen.
Füge im Bullet-Objekt ein Outside Room-Event hinzu mit folgendem Code:

instance_destroy();

So werden alle Laserschüsse sauber entfernt – das hält dein Spiel performant und sauber.
Damit kannst du jetzt fliegen und schießen – und fühlst dich langsam wie ein echter Space Commander. 🛸🔥
6. Asteroiden zum Leben erwecken
1. Bewegung im All
Unsere Felsen sollen durch den Raum schweben – zufällig, langsam und leicht rotierend.
Öffne obj_rock
und füge ein Create-Event hinzu mit folgendem Code:
speed = 1;
direction = random(360);
image_angle = random(360);

Das bedeutet:
- 🏁
speed = 1
: Jeder Asteroid bewegt sich langsam - 🎯
direction = random(360)
: Start in zufällige Richtung - 🔄
image_angle = random(360)
: Bereits beim Start ein bisschen gedreht
2. Endlos durch den Raum
Damit die Asteroiden nicht einfach verschwinden, wenn sie den Rand erreichen, kommt Wrapping + Rotation ins Spiel.
Füge ein Step-Event in obj_rock
ein und schreibe:
move_wrap(true, true, 100);
image_angle += 1;

Erklärung:
- 🌌
move_wrap(true, true, 100)
: Wenn der Felsen 100px außerhalb ist, erscheint er auf der anderen Seite - 🌀
image_angle += 1
: Lässt ihn sich langsam drehen

3. Felsen zerstören – mit Logik!
Jetzt wird's interaktiv: Wenn ein Schuss einen Asteroiden trifft, soll etwas passieren.
Öffne obj_rock
, füge ein Collision-Event mit obj_bullet
hinzu
und füge diesen Code ein:
instance_destroy(other); // Bullet zerstören
effect_create_above(ef_explosion, x, y, 1, c_white); // Effekt anzeigen
if sprite_index == spr_rock_big {
sprite_index = spr_rock_small;
instance_copy(true); // Zwei kleine aus einem großen
}
else if instance_number(obj_rock) < 12 {
sprite_index = spr_rock_big;
x = -100; // Respawn offscreen
}
else instance_destroy();


Was passiert hier genau?
- 💥 Die Kugel (Bullet) wird zerstört
- ✨ Explosionseffekt erscheint
- 🪨 Wenn der Felsen groß ist: Er wird klein und verdoppelt sich
- 🌀 Wenn klein & Platz da ist: Respawn als großer Felsen außerhalb des Raums
- 🚫 Sonst: Der Felsen wird komplett zerstört
12
legt fest, wie viele Asteroiden max. existieren
dürfen –
kannst du beliebig ändern.
Deine Asteroiden sind jetzt lebendig, bewegen sich frei, rotieren – und reagieren auf Schüsse. Das Spiel fängt an, richtig Spaß zu machen! 😎
7. Game Over & Neustart mit Alarm
Jetzt wird’s ernst: Wenn dein Schiff gegen einen Asteroiden knallt, explodiert es – und zwei Sekunden später startet das Spiel automatisch neu. 🔄💥
1. Collision mit Felsen
Öffne obj_player
und füge ein Collision-Event mit obj_rock
hinzu. Dort kommt dieser Code rein:
effect_create_above(ef_firework, x, y, 1, c_white);
instance_destroy();
obj_game.alarm[0] = 120;

Was passiert hier?
- 🎆 Eine Feuerwerks-Explosion erscheint an der Position des Schiffs
- 🛸 Das Schiff (Spieler) wird zerstört
- ⏲️ In
obj_game
wirdalarm[0]
auf 120 gesetzt (das sind 2 Sekunden bei 60 FPS)
Weil das Schiff sofort zerstört wird – und zerstörte Objekte können keine Alarme mehr auslösen.
Lösung:
obj_game
übernimmt die Aufgabe.
2. Alarm 0 in obj_game
Öffne obj_game
und füge ein Alarm 0-Event hinzu. Trag diesen Code ein:
room_restart();

💫 Das startet den Raum neu – und damit auch dein Spiel. Alles wird zurückgesetzt, ready for another try!
3. Nicht vergessen: obj_game in den Raum ziehen
Damit das mit dem Alarm funktioniert, muss obj_game
überhaupt im Spiel sein!
- Öffne
Room1
- Wähle die Ebene Instances
- Zieh
obj_game
aus dem Asset Browser in den Raum

Weil das Objekt kein Sprite hat, wird es als Fragezeichen angezeigt – keine Sorge, das ist normal. 🤓
Jetzt läuft dein Game Loop komplett rund: Kollision → Explosion → 2 Sekunden warten → Neustart. 💥⏱️🔁

8. Punktestand einbauen
Ein Space-Shooter ohne Score? Unmöglich. Wir fügen jetzt ein simples Punktesystem ein – damit du siehst, wie viele Felsen du schon zerschossen hast. 💯
1. Score-Variable erstellen
Öffne obj_game
und füge ein Create-Event hinzu. Dort kommt folgender
Code
rein:
points = 0;

Damit legen wir die Variable points
an, in der der Punktestand gespeichert wird –
anfangs 0.
2. Score auf dem Bildschirm anzeigen
Füge im selben Objekt obj_game
ein Draw GUI-Event hinzu. Dort rein:
draw_text(10, 10, points);

🧠 Der Draw GUI-Event läuft jedes Frame und zeichnet über das Spiel – perfekt für
HUDs.
Der Text erscheint oben links bei Position 10, 10
.
3. Punkte bei Kollision hinzufügen
Öffne jetzt das Collision-Event von obj_rock
mit
obj_bullet
.
Trag dort ganz oben diesen Code ein – vor allen Bedingungen:
obj_game.points += 50;

Jeder Treffer auf einen Felsen bringt dir jetzt 50
Punkte ein. 💥 + 🎯 = ❤️

obj_game.points
?Weil die Variable
points
in obj_game
liegt – und wir hier im
obj_rock
sind, müssen wir erst auf das andere Objekt zugreifen.
Starte das Spiel – und beobachte, wie dein Punktestand in den Himmel wächst! 🌠
9. Du hast’s geschafft! 🎉
Dein Game läuft: Du kannst fliegen, schießen, Felsen zerstören, Punkte sammeln und nach dem Crash direkt weitermachen. 🛸💥
- 💻 Du hast mit GML-Only gearbeitet – ganz ohne Drag & Drop.
- 📦 Du hast Sprites, Objekte und Events gezielt eingesetzt.
- 🔁 Du hast einen echten Gameplay-Loop gebaut – mit Respawn, Score und Explosionen.
Hier ein paar Ideen für dein nächstes Level:
- 🩷 Leben einbauen – wie oft darf man crashen?
- 🔥 Soundeffekte & Musik
- 📈 Highscore speichern
- 🌌 Mehr Levels mit größerem Schwierigkeitsgrad
Oder du veröffentlichst dein Spiel gleich auf GX.games – und zeigst, was du gebaut hast!
HAVE FUN! 🎮
MAKE GAMES! 🏔️
🧠 Teste dein Wissen zum Space Rocks Tutorial
🎓 Pädagogischer Nutzen / Einsatz im Unterricht
Dieses Tutorial fördert logisches Denken, Algorithmik und kreatives Problemlösen. Es ist ideal geeignet für den Informatikunterricht, Coding-Workshops oder Jugend-Hackathons. Durch den Fokus auf GML-Code lernen Schüler:innen praxisnah, wie Spieleentwicklung funktioniert – mit direkt sichtbaren Ergebnissen und motivierendem Feedback.