[ English | 中文 | Deutsch | Español | Français | Italiano | 日本語 | 한국어 | Português | Русский ]
Pyxel ist eine Retro-Spielengine für Python.
Dank seiner einfachen, von Retro-Spielkonsolen inspirierten, Spezifikationen, wie z. B. dass nur 16 Farben angezeigt werden können und nur 4 Töne gleichzeitig wiedergegeben werden können, kannst du dich frei fühlen, um Spiele im Pixel-Art-Stil zu entwickeln.
Die Spezifikationen von Pyxel beziehen sich auf die genialen PICO-8 und TIC-80.
Pyxel ist quelloffen und kostenlos zu verwenden. Fang an, ein Retro-Spiel mit Pyxel zu entwickeln!
- Läuft unter Windows, Mac, und Linux
- Programming with Python
- 16 color palette
- 3 Image-Banks in der Größe 256x256
- 256x256 große 8 Tilemaps
- 4 Kanäle mit 64 definierbaren Tönen
- 8 Musikspuren, die beliebige Klänge kombinieren können
- Tastatur-, Maus- und Gamepad-Eingaben
- Bild- und Toneditor
Es gibt zwei Arten von Pyxel, eine Package-Version und eine Standalone-Version.
Die Package-Version von Pyxel nutzt Pyxel als ein Python Extension Modul.
Empfohlen für diejenigen, die mit der Verwaltung von Python-Paketen mit dem pip
-Befehl vertraut sind oder die vollwertige Python-Anwendungen entwickeln wollen.
Windows
Nach der Installation von Python3 (Version 3.7 oder höher), führe folgenden Befehl aus:
pip install -U pyxel
Mac
Nach der Installation von Python3 (version 3.7oder höher), führe folgenden Befehl aus:
pip3 install -U pyxel
Linux
Nach der Installation des SDL2-Packages (libsdl2-dev
für Ubuntu), Python3 (version 3.7 oder höher) und python3-pip
, führe folgenden Befehl aus:
pip3 install -U pyxel
Wenn das oben genannte nicht funktioniert, versuche Pyxel selber zu kompilieren, indem du die folgenden Schritte befolgst, wofür cmake
und rust
installiert werden müssen:
git clone https://github.com/kitao/pyxel.git
cd pyxel
make clean all RELEASE=1
pip3 install .
Die Standalone-Version von Pyxel verwendet Pyxel als eigenständiges Werkzeug, das nicht von Python abhängig ist.
Empfohlen für diejenigen, die einfach mit dem Programmieren beginnen wollen, ohne sich um Python-Einstellungen zu kümmern, oder für diejenigen, die sofort Pyxel-Spiele spielen wollen.
Windows
Lade die neueste Version des Windows-Installationsprogramms (pyxel-[version]-windows-setup.exe
) von der Download-Seite herunter.
Mac
Nach der Installation von Homebrew, führe folgenden Befehl aus:
brew tap kitao/pyxel
brew install pyxel
Linux
Nach der Installation des SDL2-Packages (libsdl2-dev
für Ubuntu) und Homebrew, führe folgenden Befehl aus:
brew tap kitao/pyxel
brew install pyxel
Falls die oben gennanten Schritte nicht funktionieren, versuche die Package-Version selber zu kompilieren.
Nach der Installation von Pyxel kannst du die Beispiele von Pyxel mit dem folgenden Befehl in das aktuelle Verzeichnis kopieren:
pyxel copy_examples
Die zu kopierenden Beispiele lauten wie folgt:
- 01_hello_pyxel.py - Einfaches Fenster
- 02_jump_game.py - Spring Spiel mit Pyxel-Ressource-Datei
- 03_draw_api.py - Demonstration der Zeichen-APIs
- 04_sound_api.py - Demonstration of Sound-APIs
- 05_color_palette.py - Farbpalleten Liste
- 06_click_game.py - Maus-Klick-Spiel
- 07_snake.py - Snake mit BGM
- 08_triangle_api.py - Demonstration of triangle drawing APIs
- 09_shooter.py - Shoot'em up mit Displayübergängen
- 10_platformer.py - Side-Scroller Platform Spiel mit Karte
Führe eines der Beispiele mit folgendem Befehl aus:
cd pyxel_examples
pyxel run 01_hello_pyxel.py
Nachdem du das Pyxel-Modul in Ihr Python-Skript importiert hast, gib zunächst die Fenstergröße mit der Funktion init
an und starten dann die Pyxel-Anwendung mit der Funktion run
.
import pyxel
pyxel.init(160, 120)
def update():
if pyxel.btnp(pyxel.KEY_Q):
pyxel.quit()
def draw():
pyxel.cls(0)
pyxel.rect(10, 10, 20, 20, 11)
pyxel.run(update, draw)
Die Argumente der Funktion run
sind die update
Funktion, um jedes Bild zu aktualisieren, und die Funktion draw
, um den Bildschirm bei Bedarf zu zeichnen.
In einer tatsächlichen Anwendung ist es empfehlenswert, den Pyxel-Code in eine Klasse zu verpacken, wie unten dargestellt:
import pyxel
class App:
def __init__(self):
pyxel.init(160, 120)
self.x = 0
pyxel.run(self.update, self.draw)
def update(self):
self.x = (self.x + 1) % pyxel.width
def draw(self):
pyxel.cls(0)
pyxel.rect(self.x, 0, 8, 8, 9)
App()
Es ist auch möglich, einfachen Code zu schreiben, der die Funktionen show
und flip
verwendet, um einfache Grafiken und Animationen zu zeichnen.
Die Funktion show
zeigt das Fenster an und wartet, bis die Taste Esc
gedrückt wird.
import pyxel
pyxel.init(120, 120)
pyxel.cls(1)
pyxel.circb(60, 60, 40, 7)
pyxel.show()
Die Funktion "flip" aktualisiert den Bildschirm einmal.
import pyxel
pyxel.init(120, 80)
while True:
pyxel.cls(3)
pyxel.rectb(pyxel.frame_count % 160 - 40, 20, 40, 40, 7)
pyxel.flip()
Das erstellte Python-Skript kann mit dem folgenden Befehl ausgeführt werden:
pyxel run PYTHON_SCRIPT_FILE
In der Package-Version kann es wie ein normales Python-Skript ausgeführt werden:
cd pyxel_examples
python3 PYTHON_SCRIPT_FILE
(Für Windows, gib python
anstatt python3
ein)
Die folgenden Shortcuts können eingegeben werden, während eine Pyxel-Anwendung läuft:
Esc
Schließt die AnwendungAlt(Option)+1
Speichert einen Screenshot zum DesktopAlt(Option)+2
Setzt die Startzeit für die Aufnahme des Bildschirmaufzeichnung zurückAlt(Option)+3
Speichert die Bildschirmaufzeichnung zum Desktop (bis zu 10 Sekunden)Alt(Option)+0
Umschalten des Leistungsmonitors (fps, Updatezeit und Framezeit)Alt(Option)+Enter
Fullscreen umschalten
Der Pyxel Editor kann Bilder und Töne erstellen, die in einer Pyxel-Anwendung verwendet werden.
Starte den Editor mit folgendem Befehl:
pyxel edit [PYXEL_RESOURCE_FILE]
Wenn die angegebene Pyxel-Datei (.pyxres) existiert, wird die Datei geladen, wenn nicht, wird eine neue Datei mit dem angegebenen Namen erstellt. Wenn die Datei nicht angegeben wird, lautet der Name my_resource.pyxres.
Nach dem Start des Pyxel-Editors kann die Datei durch Drag-and-Drop einer anderen Ressourcendatei gewechselt werden. Wenn die Taste Strg(Cmd)
während des Drag-and-Drops gedrückt wird, wird nur der Ressourcentyp (Bild/Tilemap/Sound/Musik), der gerade bearbeitet wird, geladen. Das ermöglicht es, mehrere Ressourcendateien zu einer einzigen zu kombinieren.
Die erstellte Ressourcendatei kann mit der Funktion load
geladen werden.
Der Pyxel Editor hat die folgenden Bearbeitungsmodi
Bildeditor:
Der Modus zum Editieren von Image Banks.
Per Drag-and-Drop einer Bild-Datei (png/gif/jpeg) auf das Bildeditor-Fenster kann das Bild in die aktuell ausgewählte Image-Bank geladen werden.
Tilemap-Editor:
Der Modus zum editieren von Tilemaps in welcher Bilder aus der Image Bank in einem Tile-Pattern arrangiert sind.
Sound-Editor:
Der Modus um Sounds zu editieren.
Musik-Editor:
Der Modus um Sounds in Wiedergabereihenfolge zu Musik zusammenzufügen.
Pyxel-Bilder und Tilemaps können auch mit den folgenden Methoden erstellt werden:
- Erstelle ein Bild aus einer Liste strings mit der
Image.set
Funktion oder derTilemap.set
Funktion. - Lade eine Bild-Datei (png/gif/jpeg) in die Pyxel-Palette mit der
Image.load
Funktion.
Pyxel-Sounds können auch mit der folgenden Methode erstellt werden:
- Erstelle einen Sound aus einem String mit der
Sound.set
Funktion oder derMusic.set
Funktion.
Bitte lesen Sie die API-Referenz für die Verwendung dieser Funktionen.
Pyxel unterstützt ein spezielles Dateiformat für das Teilen von Pyxel-Anwendungen (Pyxel application file), das plattformübergreifend funktioniert.
Erstelle die Pyxel-Anwendungsdatei (.pyxapp) mit folgendem Befehl:
pyxel package APP_ROOT_DIR STARTUP_SCRIPT_FILE
Wenn die Anwendung Ressourcen oder zusätzliche Module enthalten soll, legen Sie diese in den Anwendungsordner.
Die erstellte Anwendungsdatei kann mit dem folgenden Befehl ausgeführt werden:
pyxel play PYXEL_APP_FILE
-
width
,height
Die Breite und Höhe des Fensters -
frame_count
Die Anzahl der bereits gezeigten Bilder -
init(width, height, [title], [fps], [quit_key], [capture_sec])
Initialisiere die Bildschirmgröße der Pyxel-Anwendung (width
,height
). Folgenden kann als Option engegeben werden: den Titel des Fensters mittitle
, die Framerate mitfps
, die Taste zum Beenden des Programmsquit_key
, und die maximale Aufnahmezeit des Bildschirmaufnahmevideos mitcapture_sec
.
z.B.pyxel.init(160, 120, title="Pyxel mit Optionen", fps=60, quit_key=pyxel.KEY_NONE, capture_sec=0)
-
run(update, draw)
Starte das Pyxel-Programm und rufe die Funktionupdate
zum Updaten des Bildschirms und diedraw
Funktion zum anzeigen. -
show()
Zeige das Fenster und warte bis dieEsc
Taste gedrückt wird. (Nicht in normalen Anwendungen benutzen) -
flip()
Updatet das Fenster ein mal. (Nicht in normalen Anwendungen benutzen) -
quit()
Beende das Pyxel-Programm nach dem aktuellen Bild.
load(filename, [image], [tilemap], [sound], [music])
Lade die Ressourcen-Datei (.pyxres). FallsFalse
für den Ressourcentyp angegeben ist (image/tilemap/sound/music
), wird die Ressource nicht geladen.
-
mouse_x
,mouse_y
Die aktuelle Position der Maus -
mouse_wheel
Der aktuelle Wert des Scrollrads -
btn(key)
ReturnTrue
fallskey
gedrückt ist, sonst returnFalse
(key definition list) -
btnp(key, [hold], [period])
ReturnTrue
fallskey
gedrückt ist, sonst returnFalse
. Wennhold
undperiod
angegeben sind, wirdTrue
amperiod
Bildintervall returned, fallskey
für mehr alshold
Frames gedrückt ist -
btnr(key)
ReturnTrue
fallskey
in dem Frame losgelassen wird, sonst returnFalse
-
mouse(visible)
Fallsvisible
True
ist, zeige den Mauscursor. FallsFalse
, verstecke ihn. Obwohl man den Cursor dann nicht sehen kann, wird seine Position geupdated
-
colors
Liste der Anzeigefarben der Palette. Die Anzeigefarbe wird durch einen numerischen 24-Bit-Wert angegeben. Verwendecolors.from_list
undcolors.to_list
, um Python-Listen direkt zuzuweisen und abzurufen.
z.B.org_colors = pyxel.colors.to_list(); pyxel.colors[15] = 0x112233; pyxel.colors.from_list(org_colors)
-
image(img)
Bediene die Image-Bankimg
(0-2). (Siehe die Klasse Image)
z.B.pyxel.image(0).load(0, 0, "title.png")
-
tilemap(tm)
Bediene die Tilemaptm
(0-7) (siehe die Tilemap class) -
clip(x, y, w, h)
Setze den Bildausschnitt von (x
,y
) zu Breitew
und Höheh
. Setze den Bildausschnitt zurück zum Follbild mitclip()
-
pal(col1, col2)
Ersetze Farbecol1
mitcol2
beim zeichnen. Mitpal()
lässt sich die Pallete auf die initiale zurücksetzen -
cls(col)
Das Fenster mit der Farbecol
füllen -
pget(x, y)
Erhalte den Pixel an der Position (x
,y
). -
pset(x, y, col)
Zeichne einen Pixel der Farbecol
an der Position (x
,y
) -
line(x1, y1, x2, y2, col)
Zeichne eine Linie der Farbecol
von (x1
,y1
) bis (x2
,y2
) -
rect(x, y, w, h, col)
Zeichne ein Rechteck der Breitew
, Höheh
und Farbecol
ausgehend von (x
,y
) -
rectb(x, y, w, h, col)
Zeichne die Umrisse eines Rechtecks der Breitew
, Höheh
und Farbecol
ausgehend von (x
,y
) -
circ(x, y, r, col)
Zeichne einen Kreis mit dem Radiusr
und Farbecol
an der Stelle (x
,y
) -
circb(x, y, r, col)
Zeichne die Umrisse eines Kreises mit dem Radiusr
und Farbecol
an der Stelle (x
,y
) -
tri(x1, y1, x2, y2, x3, y3, col)
Zeichne ein Dreieck mit den Scheitelpunkten (x1
,y1
), (x2
,y2
), (x3
,y3
) und Farbecol
-
trib(x1, y1, x2, y2, x3, y3, col)
Zeichne die Umrisse eines Dreiecks mit den Scheitelpunkten (x1
,y1
), (x2
,y2
), (x3
,y3
) und Farbecol
-
blt(x, y, img, u, v, w, h, [colkey])
Kopiere eine Region der Größe (w
,h
) von (u
,v
) des Image Banksimg
(0-2) zur Position (x
,y
). Fallsw
und/oderh
negativ ist, wird der Ausschnitt horizontal und/oder vertical gespiegelt. Fallscolkey
angegeben ist, wird der Auschnitt als transparentes Farbe behandelt
-
bltm(x, y, tm, u, v, w, h, [colkey])
Zeichne die Tilemaptm
(0-7) an der Stelle (x
,y
) entsprechend der Tile-Informationen der Größe (w
,h
) von (u
,v
). Draw the tilemaptm
(0-7) to (x
,y
) according to the tile information of size (w
,h
) from (u
,v
). Fallscolkey
angegeben ist, wird es als transparente Farbe behandelt. Die Größe einer Tile ist 8x8 Pixel und wird in der Tilemap als eine Tuple von(x in Tile, y in Tile)
gespeichert. -
text(x, y, s, col)
Zeichne einen Strings
der Farbecol
bei (x
,y
)
-
sound(snd)
Bediene den Tonsnd
(0-63). (siehe die Sound class).
z.B.pyxel.sound(0).speed = 60
-
music(msc)
Bediene die Musikmsc
(0-7) (siehe die Music class) -
play_pos(ch)
Ermittelt die Tonwiedergabeposition des Kanalsch
(0-3) als Tupel von(Ton-Nr., Noten-Nr.)
. GibtNone
zurück, wenn die Wiedergabe gestoppt ist. -
play(ch, snd, loop=False)
Spielt den Tonsnd
(0-63) auf Kanalch
(0-3). Fallssnd
eine Liste ist, wird es in der Reihenfolge abgespielt. FallsTrue
fürloop
angeben ist, wird eine Schleifenwiedergabe durchgeführt. -
playm(msc, loop=False)
Spielt die Musikmsc
(0-7). FallsTrue
fürloop
angegeben ist, wird eine Schleifenwiedergabe durchgeführt. -
stop([ch])
Stoppt die Wiedergabe des angegebenen Kanalsch
(0-3).stop()
, um die Wiedergabe aller Kanäle zu stoppen. -
play_pos(ch)
Erhalte die Sound-Playback-Position des Kanalsch
. Die 100's und 1000's zeigen die Soundnummer und die 1's und 10's zeigen die Notennummer. Wenn playback gestoppt ist, return-1
-
width
,height
Die Breite und Höhe des Bildes -
data
Die Daten des Bildes (256x256 zweidimensionale list) -
get(x, y)
Erhalte die Daten des Bildes an der Position (x
,y
) -
set(x, y, data)
Setzen des Bildes an (x
,y
) durch eine Liste von strings.
z.B.pyxel.image(0).set(10, 10, ["1234", "5678", "9abc", "defg"])
-
load(x, y, filename)
Lade die Bild-Datei (png/gif/jpeg) at (x
,y
).
-
width
,height
Die Breite und Höhe der Tilemap -
refimg
Die von der Tilemap referenzierte Image-Bank (0-2) -
set(x, y, data)
Setzen der Tilemap an (x
,y
) durch eine Liste von strings.
z.B.pyxel.tilemap(0).set(0, 0, ["000102", "202122", "a0a1a2", "b0b1b2"])
-
pget(x, y)
Gibt die Tile bei (x
,y
). Ein Tile ist eine Tuple von(x in tile, y in tile)
. -
pset(x, y, tile)
Zeichne einetile
bei (x
,y
). Ein Tile ist eine Tuple von(x in tile, y in tile)
.
-
notes
Liste der Noten (0-127). Je höher die Zahl, desto höher die Tonhöhe, und bei 33 wird sie zu "A2" (440Hz). Der Rest ist -1. -
tones
Liste der Töne (0:Triangle/ 1:Square / 2:Pulse / 3: Noise) -
volumes
Liste von Lautstärken (0-7) -
effects
Liste von Effekten (0:None / 1:Slide / 2:Vibrato / 3:FadeOut) -
speed
Abspielgeschwindigkeit. 1 ist die schnellste, und je größer die Zahl, desto langsamer die Wiedergabegeschwindigkeit. Bei 120 entspricht die Länge einer Note 1 Sekunde. -
set(notes, tones, volumes, effects, speed)
Legt Noten, Töne, Lautstärken und Effekte mit einer Zeichenfolge fest. Wenn die Länge der Töne, Lautstärken und Effekte kürzer ist als die der Noten, wird sie von Anfang an wiederholt. -
set_notes(notes)
Setzt die Noten mit einem string aus 'CDEFGAB'+'#-'+'0123' oder 'R'. Groß- und Kleinschreibung sowie Leerzeichen werden ignoriert.
z.B.pyxel.sound(0).set_note("G2B-2D3R RF3F3F3")
-
set_tones(tones)
Setzt die Töne mit einem string aus 'TSPN'. Groß- und Kleinschreibung sowie Leerzeichen werden ignoriert.
z.B.pyxel.sound(0).set_tone("TTSS PPPN")
-
set_volumes(volumes)
Setzt die Lautstärke mit einer Zeichenkette aus '01234567'. Groß- und Kleinschreibung sowie Leerzeichen werden ignoriert.
z.B.pyxel.sound(0).set_volume("7777 7531")
-
set_effects(effects)
Setzt die Effekte mit einer Zeichenkette aus 'NSVF'. Groß- und Kleinschreibung sowie Leerzeichen werden ignoriert.
z.B.pyxel.sound(0).set_effect("NFNF NVVS")
-
sequences
Zweidimensionale Liste von Klängen (0-63), aufgelistet nach der Anzahl der Kanäle -
set(seq0, seq1, seq2, seq3)
Setzt die Tonlisten (0-63) für alle Kanäle fest. Wenn eine leere Liste angegeben wird, wird dieser Kanal nicht für die Wiedergabe verwendet.
z.B.pyxel.music(0).set([0, 1], [2, 3], [4], [])
Pyxel verfügt über "fortgeschrittene APIs", die in dieser Referenz nicht erwähnt werden, weil sie "Benutzer verwirren können" oder "spezielles Wissen zur Nutzung erfordern".
Wenn du mit deinen Fähigkeiten vertraut bist, versuche hiermit als Anhaltspunkt erstaunliche Werke zu schaffen!
Verwende den [Issue Tracker] (https://github.com/kitao/pyxel/issues), um Fehlerberichte und Funktions-/Erweiterungswünsche einzureichen. Vergewissere dich vor dem Einreichen eines neuen Problems, dass es kein ähnliches offenes Problem gibt.
Jeder, der den Code manuell testet und Fehler oder Verbesserungsvorschläge im Issue Tracker meldet, ist herzlich willkommen!
Patches/Fixes werden in Form von Pull Requests (PRs) akzeptiert. Stellen Sie sicher, dass das Problem, auf das sich der Pull Request bezieht, im Issue Tracker offen ist.
Bei einem eingereichten Pull-Request wird davon ausgegangen, dass der Veröffentlichung unter der MIT Lizenz zugestimmt wird.
Pyxel steht unter der MIT-Lizenz. Es kann innerhalb proprietärer Software wiederverwendet werden, vorausgesetzt, dass alle Kopien der Software oder ihrer wesentlichen Teile eine Kopie der Bedingungen der MIT-Lizenz und auch einen Copyright-Hinweis enthalten.