<

Baue dein eigenes Spaceshooter-Spiel mit GameMaker
Schritt für Schritt, ganz ohne Drag & Drop

  1. 1. Flieg los – mit Bewegung & Rotation
  2. 2. Mach’s kaputt – zerstöre Felsen mit Lasern
  3. 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)

Space Rocks Template auswählen

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:

Asset Browser mit Sprites

Hier sind schon ein paar Sprites dabei – also Bilder für deine Objekte:

Tipp: Du kannst jedes dieser Sprites im Asset Browser doppelklicken, um es dir genauer anzuschauen.

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

  1. Rechtsklick im Objects-Ordner → Create → Object
  2. Objekt erstellen
  3. Benenne es um in obj_player
  4. Sprite zuweisen
Tipp: Objekt markieren und F2 drücken – damit kannst du es sofort umbenennen.

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. ✨

Sprite zuweisen

Weitere Spielobjekte

Erstelle nun drei weitere Objekte auf die gleiche Weise:

Alle Objekte im Asset Browser
Hinweis: Objekte ohne Sprite erscheinen später im Raum mit einem Fragezeichen. Das ist völlig okay!

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.

Room Asset

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. 🚀

Room Inspector

Layer verstehen

Im Room Editor siehst du zwei Ebenen:

Layers

Spieler platzieren

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

obj_player platzieren

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. 💥

Asteroiden platzieren
Hinweis: Du kannst später noch beliebig viele Objekte hinzufügen oder verschieben – keine Sorge.

🎭 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.

Fun Fact: Wenn du ein GameMaker-Objekt wärst, würdest du im "Create"-Event geboren – und im "Step"-Event ständig weiterleben. 😄

1. Step-Event anlegen

  1. Öffne obj_player mit Doppelklick im Asset Browser
  2. Klick auf Add Event → Step → Step
Step-Event hinzufügen

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;
Step-Event hinzufügen

Damit steuerst du dein Raumschiff wie in Asteroids:

Spielerbewegung in Aktion
Tipp: Die 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);
Wrap-around Bewegung
Vergleich: Stell dir das Spielfeld wie eine Pac-Man-Welt vor – was rechts rausgeht, kommt links wieder rein. 🌌

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);
}
Schuss wird erzeugt

Dieser Code bedeutet:

Tipp: 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;
Bullet Richtung und Speed

Damit fliegt der Schuss:

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:

Step-Event hinzufügen

instance_destroy();
Bullet Outside Room destroy

So werden alle Laserschüsse sauber entfernt – das hält dein Spiel performant und sauber.

Wichtig: Ohne dieses Event würden sich unzählige Schüsse im Speicher sammeln. Chaos! 🧠💣

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);
Asteroiden bewegen sich

Das bedeutet:

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;
Asteroiden Step

Erklärung:

Asteroiden bewegen sich

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();
Asteroiden werden zerstört Shoot

Was passiert hier genau?

Tipp: Die Zahl 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;
Explosion bei Kollision

Was passiert hier?

Warum nicht im Spielerobjekt?
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();
room_restart im Alarm Event

💫 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!

obj_game in Raum platzieren

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. 💥⏱️🔁

Restart nach Game Over

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;
Variable im Create-Event

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);
Score anzeigen mit draw_text

🧠 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.

Hinweis: Du kannst Position und Style natürlich anpassen – größerer Text, andere Farbe, Font … ganz wie du willst.

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;
50 Punkte bei Kollision

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

Score
Warum 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. 🛸💥

Und jetzt?
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

1. Wie oft wird das Step-Event pro Sekunde aufgerufen?

2. Was macht move_wrap(true, true, 0)?

3. Warum brauchen wir obj_game für den Neustart?

4. Wie erzeugt man einen Laserschuss?

5. Wofür wird obj_game.points verwendet?

🎓 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.

Berg
Have Fun!
Make Games!
© 2025 coldrock.games