Code-Editor & Player

Pyxen bringt einen Code-Editor und dein laufendes Spiel in dasselbe Fenster. Du schreibst Pyxen Script im Code-Bereich und spielst dein Spiel daneben in der Vorschau.

Code-Editor

Der Editor färbt Pyxen Script ein und prüft deinen Code, während du tippst: Ein Problem erscheint in seiner Zeile, mit dem Grund.

Auf dem Mac und auf dem iPad mit Hardware-Tastatur funktionieren die üblichen Kurzbefehle: Auswählen, Kopieren, Einsetzen, Widerrufen, Wiederholen. Maus oder Trackpad setzen den Cursor genau.

Parameter beim Tippen

Tippe die ( eines Aufrufs, world.get( oder hero.tween(, und eine Karte über der Zeile zeigt, was der Aufruf erwartet: seine Parameter, den, bei dem du gerade bist, hervorgehoben, dessen Zeile aus der Referenz und Referenz ›, um seine Seite zu öffnen. Sie folgt dir über die Kommas und in verschachtelte Aufrufe und verschwindet, wenn du die schließende ) tippst. Deine eigenen Funktionen bekommen die Karte auch, mit der ersten Zeile ihres Docstrings.

Die Liste unter der Zeile bietet zuerst an, was passt: die in deinem Projekt geschriebenen Entity-Namen für world.get(, die Easing-Namen nach ease=, die Schlüsselwörter, die der Aufruf noch nicht bekommen hat, dann die üblichen Namen. Sie kennt nur ausgeschriebene Namen: Eine Entity, die erst im laufenden Spiel benannt wird, steht nicht darin.

Drücke Esc einmal, um die Liste zu schließen, zweimal, um die Karte für diesen Aufruf auszublenden. Cmd+Umschalt+Leertaste (Bearbeiten › Parameter anzeigen) holt sie zurück, und Ctrl+Leertaste (Bearbeiten › Vorschläge anzeigen) öffnet die Liste. Auf dem iPad öffnet ein Tippen auf die Karte die Referenz; mit der Bildschirmtastatur tippt die Taste . der Tastenleiste in einem Aufruf ein ,.

Assets beim Tippen

In den Anführungszeichen eines Namens, den ein Aufruf erwartet, Sprite(", Sound(", Music(", Text(…, font=" oder GridMap(tilemap=", zeigt die Liste die Assets dieser Art aus deinem Projekt, dann die jedes Asset-Pakets, jedes mit seinem Bild: die erste Kachel eines Bildes (oder das ganze Bild) mit Größe und Animationen, eine Schrift, die den Text des Aufrufs schreibt, eine Karte im Kleinen. Nach animation=" zeigt sie die Animationen des Bildes, das im selben Aufruf genannt ist, jede davon abgespielt. Das gewählte erscheint größer neben der Liste, mit In Sprite öffnen › (oder dem Bereich für seine Art), um es zu öffnen.

Sounds und Musik haben ein ▶: Klicke darauf oder drücke Wahl+Return (Bearbeiten › Auswahl anzeigen) beim ausgewählten, um es anzuhören. Beim Durchgehen der Liste spielt nichts, und Esc hält es an. Ein Sound aus einer Soundbank wird "bank/sound" geschrieben.

Die Liste kennt nur ausgeschriebene Namen: Ein Name in einer Variablen oder aus Teilen zusammengesetzt bekommt keine Liste, und die Karte sagt, dass er beim Spielen berechnet wird. Mit der Systemeinstellung „Bewegung reduzieren“ stehen die Animationen still.

In einem Kachel-Argument, Sprite("tiles", tile=( oder bei einer Karte level.set(…, tile=(, öffnet sich die Kachelauswahl unter der Zeile mit dem Bild, das der Aufruf nennt, und seinem Raster. Klicke auf eine Kachel oder ziehe über mehrere: Die Zahlen werden beim Auswählen in deinen Code geschrieben, in Pixeln für ein Sprite, (x, y, w, h), und in Zellen für eine Karte, (column, row). Tippst du die Zahlen selbst, folgt die Auswahl. Return behält sie (auf dem iPad Fertig), Esc stellt wieder her, was dort stand, und ein einziges Widerrufen nimmt die ganze Auswahl zurück. Bei einem leeren tile=( öffnet sie sich von selbst; für eine schon geschriebene Kachel klicke auf ihr kleines Bild direkt vor den Zahlen, oder drücke Option+Return (Bearbeiten › Auswahl anzeigen) und nimm die Pfeiltasten (mit Umschalt für mehr Kacheln). Eine aus einer Konstante berechnete Zahl, etwa HERO * 16, wird gestrichelt gezeigt, und die Auswahl sagt es, bevor sie Zahlen darüber schreibt. Ein Bild ohne Raster wählt in der Größe, die die Zahlen schon angeben, sonst in 16 Pixeln.

Halte Cmd gedrückt und bewege den Zeiger über den Namen eines Assets in deinem Code, etwa "ninja" in Sprite("ninja", animation="run"): Der Name wird unterstrichen, und eine Karte zeigt das Asset mit Bild, Größe und Animationen. Cmd+Klick öffnet das Asset in seinem Editor an der Stelle, die der Aufruf nennt: den Sprite-Editor auf der Animation run, das Rechteck eines tile=(16, 0, 16, 16) ausgewählt oder den Sound einer Bank, Sound("sfx/coin"), in seiner Sound-Bank gewählt. Ein Name, den dein Projekt nicht hat, öffnet nichts.

Und zurück: Der Bereich eines Assets zeigt Im Code verwendet mit der Zahl der Zeilen deiner Skripte, die es nennen. Wähle eine in seinem Menü, um zu dieser Zeile zu gehen. Ist die Leiste des Bereichs zu schmal dafür, steht es oben im Menü ⋯ des Bereichs.

Ein Name, den dein Projekt nicht hat, etwa "ninjaa" in Sprite("ninjaa"), wird schon vor dem Start des Spiels gelb unterstrichen. Setz den Cursor darauf, und eine Karte sagt Nichts im Projekt heißt „ninjaa“., mit „ninja“ verwenden, um den ähnlichsten Namen an seine Stelle zu schreiben, und Neues Bild…, um es anzulegen (Neue Tilemap…, Neue Schriftart… oder Neue Sound-Bank… für diese Arten). Eine Animation, die das Bild nicht hat, wird genauso unterstrichen, ebenso tile= und animation= im selben Sprite, die nicht zusammen verwendet werden können. Das sind Warnungen, keine Fehler: Das Spiel startet trotzdem, denn ein Name kann aus einem Asset-Pack kommen, das du später hinzufügst. Geprüft werden nur Namen, die als Text geschrieben sind.

Zu Symbol springen

Drücke Cmd+Umschalt+O (Bearbeiten › Zu Symbol springen…), um die Funktionen und Namen deines Projekts und die Einträge der Referenz aufzulisten. Tippe zum Filtern und wähle einen aus, um dorthin zu springen.

Zur Definition springen

Cmd+Klick auf einen Funktions- oder Variablennamen, oder Cmd+J (Bearbeiten › Zur Definition springen) mit dem Cursor darauf, führt dorthin, wo er definiert ist. Das funktioniert über die Dateien deines Projekts hinweg: Ist eine Funktion in utils.py definiert und wird in main.py aufgerufen, bringt dich Cmd+Klick direkt dorthin. Hat ein Name mehrere Definitionen oder keine in deinem Projekt, öffnet sich Zu Symbol springen damit.

Wortweise Navigation

Mit Option+Pfeiltaste bewegst du den Cursor wortweise statt zeichenweise. Zusammen mit Umschalt wählst du Wort für Wort aus: praktisch, um schnell einen Variablennamen oder einen Funktionsaufruf auszuwählen.

Textgröße und Themes

Drücke Cmd+=, um den Code zu vergrößern, und Cmd+-, um ihn zu verkleinern, oder wähle Darstellung › Text vergrößern und Text verkleinern. Unter Einstellungen › Editor stellst du die Größe von 10 bis 32 Punkt ein und wählst eines von zehn Themes für den Code: Automatisch folgt dem Erscheinungsbild mit Pyxen Dark oder Pyxen Light; die anderen sind Pyxen Deep Dark, Pyxen Deep Light, Dracula, GitHub Light, One Dark, One Light, Solarized Dark und Solarized Light.

In einem schmalen iPad-Fenster

Ist das Fenster schmaler als 900 Punkte (ein 11-Zoll-iPad im Hochformat, Split View, Slide Over), zeigt Pyxen einen Bereich auf einmal, die anderen als Tabs darüber, und seine Werkzeuge liegen in der Ablage am Fuß des Fensters. Tippe auf ihren Griff, um sie höher oder niedriger zu machen, oder ziehe sie nach unten, um sie einzuklappen. Die Ablage des Code-Bereichs hat:

Mit der Bildschirmtastatur liegen die Tasten für Code in der Zeile über der Tastatur; mit einer Hardware-Tastatur hat der Code-Bereich keine Ablage.

Dein Spiel ausführen

Wähle Ausführen (Cmd+R), um deinen Code zu prüfen, zu kompilieren und auszuführen. Das Spiel startet in der Vorschau. Stopp (Cmd+.) beendet es, und Pause in der Leiste der Vorschau hält es auf einem Frame an.

Hat dein Code einen Fehler, zeigt Pyxen die Meldung in seiner Zeile. Behebe ihn und führe es erneut aus.

Frame-Inspektor

Wenn du ein laufendes Spiel pausierst, wird der Frame-Inspektor aktiviert. Das ist Pyxens integrierter Debugger.

Der Inspektor ermöglicht dir:

Zeitschieber

Pyxen zeichnet bis zu 300 Frames Geschichte auf, während dein Spiel läuft, zehn Sekunden bei 30 Bildern pro Sekunde. Im Pausemodus kannst du vorwärts und rückwärts durch die Zeit scrubben.

Jeder Frame behält seine Entitäten und was er gezeichnet hat, innerhalb eines Speicherbudgets: Ein aufwendiges Spiel mit vielen Entitäten oder viel draw behält weniger Frames, die ältesten gehen zuerst, und die Zeitleiste zeigt, wie weit sie zurückreicht. Das Budget stellst du unter Einstellungen › Spielvorschau › Debugger › Verlaufsspeicher ein. Es beginnt bei dem für dein Gerät empfohlenen Wert, der darunter steht und bei den meisten Spielen 300 Frames behält.

Das bedeutet, du kannst:

Der Zeitschieber verwandelt Debugging von Rätselraten in Beobachtung. Statt Print-Anweisungen hinzuzufügen und erneut auszuführen, pausierst du, spulst zurück und schaust.

Arbeitsablauf

Ein typischer Arbeitsablauf in Pyxen:

  1. Schreibe oder bearbeite Code im Editor
  2. Zum Testen ausführen
  3. Wenn etwas falsch aussieht, pausiere das Spiel
  4. Scrub zurück in der Zeit, um den Frame zu finden, an dem es schiefging
  5. Inspiziere Entitäten, um zu sehen, welcher Zustand unerwartet war
  6. Stoppe, korrigiere den Code, wiederhole