Keep your place in this quest

Log in or sign up for free to subscribe, follow lesson progress, and access more learning content.

Exportiere dein Spiel

  1. Klicke auf das Export-Symbol in der oberen Leiste
  2. Wähle einen Speicherort und einen Dateinamen für dein Spiel
  3. Die Engine erstellt eine eigenständige .exe mit deinem eingebetteten Projekt
  4. Verteile diese Einzeldatei - keine anderen Dateien erforderlich!

Das exportierte Spiel:

  • Läuft ohne die Editor-Oberfläche
  • Enthält alle Bilder, Szenen und Codes
  • Ist verschlüsselt, um deine Assets zu schützen

Tipps und Best Practices

Leistung

  • Halte die Bildgrößen angemessen (Pixel, nicht hochauflösend)
  • Entferne Objekte, die du nicht mehr benötigst, mit removeObject()
  • Verwende Schichten, um die Render-Reihenfolge zu organisieren

Organisation

  • Gib Objekten und Bildern aussagekräftige Namen
  • Verwende Kommentare, um deinen Code zu dokumentieren
  • Gruppiere verwandte Variablen zusammen

Debugging

  • Verwende print(), um Variablenwerte auszugeben
  • Ausgabemeldungen erscheinen im Spiel-Fenster
  • Überprüfe die Kollisionsarten, wenn Objekte durch Wände hindurchgehen

Häufige Probleme

Objekte kollidieren nicht:

  • Überprüfe die Kollisionsarten (beide Objekte benötigen geeignete Typen)
  • Stelle sicher, dass Objekte der Szene hinzugefügt werden
  • Vergewissere dich, dass der Sprite einen Collider aktiviert hat

Objekte treten durch Wände:

  • Wände sollten COLLISION_STATIC() sein
  • Bewegende Objekte sollten COLLISION_DYNAMIC() sein
  • Sehr schnelle Objekte könnten tunneln - reduziere die Geschwindigkeit oder erhöhe die Kollisionsgrenzen

Die Kamera folgt dem Spieler nicht:

  • Aktualisiere die Kameraposition in onUpdate(), nicht nur in start()
  • Denk daran, dass die Kameraposition das Zentrum der Sicht ist

Schnellreferenzkarte

// Erstelle Assets
var img = Sprite(16, 16)
var scene = Scene()
var sfx = Audio()
var obj = Object("Name")

// Objektmanipulation
setX(obj, 100)
setY(obj, 100)
setSprite(obj, img)
setCollisionType(obj, COLLISION_DYNAMIC())
addObject(scene, obj)

// Sprite-Manipulation
fillSprite(img, 255, 0, 0, 255)  // Mit Rot füllen
setPixel(img, 0, 5, 5, 0, 255, 0, 255)  // Pixel bei (5,5) auf Frame 0 setzen
var color = getPixel(img, 0, 5, 5)      // [r,g,b,a] bei (5,5) abrufen
setAnimationFPS(img, 24)         // Animationsgeschwindigkeit festlegen
var fps = getAnimationFPS(img)   // Animationsgeschwindigkeit abrufen

// Physik (Geschwindigkeit + Schwerkraft)
setGravityY(scene, 300)         // Schwerkraft der Szene festlegen
setVelocityX(obj, 100)          // Nach rechts bewegen
setVelocityY(obj, -200)         // Nach oben springen

// Animationssteuerung
setFrame(obj, 0)           // Auf bestimmten Frame setzen
var frame = getFrame(obj)  // Aktuellen Frame abrufen
var count = getFrameCount(obj)  // Gesamtanzahl der Frames

// Szenensteuerung
setScene(scene)
resetScene(scene)
setBackgroundColor(scene, 135, 206, 235)  // Himmelblau

// Szenenabfragen
var obj = getObjectAt(scene, mx, my)       // Objekt an Punkt
var hits = getObjectsInBox(scene, x, y, 32, 32)  // Objekte im Bereich
var enemy = getObjectByName(scene, "enemy")     // Nach Namen suchen
var all = getAllObjects(scene)             // Alle Objekte abrufen
var count = getObjectCount(scene)          // Objekte zählen
var coins = getObjectsBySprite(scene, coinSprite)  // Nach Sprite
var enemies = getObjectsByCollisionType(scene, COLLISION_DYNAMIC())

// Audio
var handle = playAudio(sfx)
if (isAudioPlaying(handle)) { }
stopAudio(handle)

// Kamera (Position = Mittelpunkt der Sicht)
setCameraX(scene, x)
setCameraY(scene, y)
setCameraZoom(scene, 3.0)  // Zeigt 240 Welt-Einheiten vertikal

// Bildschirm- und Koordinatenumwandlung
var w = getScreenWidth()
var h = getScreenHeight()
var worldPos = screenToWorld(mouseX, mouseY)  // [worldX, worldY]
var screenPos = worldToScreen(objX, objY)     // [screenX, screenY]

// Fenster-Modus (beeinflusst nur exportierte Spiele)
setWindowMode(WINDOW_MAXIMIZED())  // Standard
setWindowMode(WINDOW_FULLSCREEN()) // Randloser Vollbild
setWindowMode(WINDOW_WINDOWED())   // Regelmäßiges Fenster

// Tasteneingabe
if (isKeyPressed(KEY_SPACE())) { }
if (isKeyHeld(KEY_LEFT())) { }

// Mauseingabe
if (isMouseButtonPressed(MOUSE_LEFT())) { }
var mx = getMouseX()
var my = getMouseY()

// Zufallszahlen und Mathematik
var r = random()              // 0.0 bis 1.0
var n = randomInt(1, 10)      // 1 bis 10
var x = clamp(14, 0, 10)      // 10
var y = lerp(0, 100, 0.5)     // 50
var snapped = round(15.7)     // 16
var dir = sign(-8)            // -1
var power = pow(2, 3)         // 8
var angle = PI() / 2          // 1.5708... Radianten
var bob = sin(angle)          // Trig verwendet Radianten
var deg = rad2deg(angle)      // 90 Grad

// UI-Stil-Stacks
uiPushElementColor(28, 40, 70, 220)
uiPushFontColor(255, 220, 120)
uiLabel("BEREIT", 4, 4)
uiPopFontColor()
uiPopElementColor()

// Speicherung (Spiel-Daten speichern/laden)
var data = [100, "Spieler", true]
save(getAppDataPath() + "/MyGame/save.dat", data)
var loaded = load(getAppDataPath() + "/MyGame/save.dat")
if (fileExists(getAppDataPath() + "/MyGame/save.dat")) { }
deleteFile(getAppDataPath() + "/MyGame/old.dat")

// Spielsteuerung
quitGame()  // Spiel beenden

// Spielschleife
func start() { }
func onUpdate(dt) { }
func onCollision(a, b) { }
func end() { }

Tiniest 2D Pixel Engine - Mache Spiele, keine Engines.