Erstelle 2D-Spiele mit Tiniest2D
Exportieren und beste Praktiken
Lesson 11 of 11 • 10 XP
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
- Klicke auf das Export-Symbol in der oberen Leiste
- Wähle einen Speicherort und einen Dateinamen für dein Spiel
- Die Engine erstellt eine eigenständige
.exemit deinem eingebetteten Projekt - 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 instart() - 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.