[ 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 Motivation für die Entwicklung von Pyxel ist das Feedback der Nutzer. Bitte geben Sie Pyxel einen Stern auf GitHub!
Die Spezifikationen und APIs von Pyxel sind inspiriert von 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, Linux und Web
- 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
Nach der Installation von Python3 (Version 3.7 oder höher), führe folgenden Befehl aus:
pip install -U pyxel
Wenn Sie Python mit dem offiziellen Installationsprogramm installieren, aktivieren Sie bitte das Kontrollkästchen Add Python 3.x to PATH
, um den Befehl pyxel
zu aktivieren.
Nach der Installation von Python3 (version 3.7oder höher), führe folgenden Befehl aus:
python3 -m pip install -U pyxel
Wenn Sie Python3 verwenden, das auf dem Mac standardmäßig installiert ist, fügen Sie bitte sudo
an den Anfang des obigen Befehls, um den Befehl pyxel
zu aktivieren.
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:
sudo pip3 install -U pyxel
Wenn das oben genannte nicht funktioniert, versuchen Sie, sich selbst gemäß den Anweisungen in Makefile zu erstellen.
Die Webversion von Pyxel erfordert keine Python oder Pyxel-Installation und läuft sowohl auf PCs als auch auf Smartphones und Tablets mit unterstützten Webbrowsern.
Eine genaue Anleitung finden Sie auf dieser Seite.
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 | Demo | Code |
02_jump_game.py | Spring Spiel mit Pyxel-Ressource-Datei | Demo | Code |
03_draw_api.py | Demonstration der Zeichen-APIs | Demo | Code |
04_sound_api.py | Demonstration of Sound-APIs | Demo | Code |
05_color_palette.py | Farbpalleten Liste | Demo | Code |
06_click_game.py | Maus-Klick-Spiel | Demo | Code |
07_snake.py | Snake mit BGM | Demo | Code |
08_triangle_api.py | Demonstration of triangle drawing APIs | Demo | Code |
09_shooter.py | Shoot'em up mit Displayübergängen | Demo | Code |
10_platformer.py | Side-Scroller Platform Spiel mit Karte | Demo | Code |
11_offscreen.py | Offscreen-Rendering mit der Klasse Image | Demo | Code |
12_perlin_noise.py | Perlin-Lärm-Animation | Demo | Code |
13_bitmap_font.py | Zeichnen einer Bitmap-Schriftart | Demo | Code |
99_flip_animation.py | Animation mit flip-Funktion (nur für Nicht-Web-Plattformen) | Demo | Code |
30SecondsOfDaylight.pyxapp | 1. Pyxel Jam Gewinnspiel von Adam | Demo | Code |
megaball.pyxapp | Arcade Ball Physik Spiel von Adam | Demo | Code |
8bit-bgm-gen.pyxapp | Hintergrundmusikgenerator von frenchbread | Demo | Code |
Führe eines der Beispiele mit folgendem Befehl aus:
cd pyxel_examples
pyxel run 01_hello_pyxel.py
pyxel play 30SecondsOfDaylight.pyxapp
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()
Bei der Erstellung einfacher Grafiken ohne Animation kann die Funktion show
verwendet werden, um den Code übersichtlicher zu gestalten.
import pyxel
pyxel.init(120, 120)
pyxel.cls(1)
pyxel.circb(60, 60, 40, 7)
pyxel.show()
Das erstellte Python-Skript kann mit dem folgenden Befehl ausgeführt werden:
pyxel run PYTHON_SCRIPT_FILE
Es kann auch wie ein normales Python-Skript ausgeführt werden:
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_DIR STARTUP_SCRIPT_FILE
Wenn die Anwendung Ressourcen oder zusätzliche Module enthalten soll, legen Sie diese in das Anwendungsverzeichnis.
Die erstellte Anwendungsdatei kann mit dem folgenden Befehl ausgeführt werden:
pyxel play PYXEL_APP_FILE
Pyxel-Anwendungsdateien können auch mit den Befehlen pyxel app2exe
oder pyxel app2html
in eine ausführbare Datei oder eine HTML-Datei umgewandelt werden.
-
width
,height
Die Breite und Höhe des Fensters -
frame_count
Die Anzahl der bereits gezeigten Bilder -
init(width, height, [title], [fps], [quit_key], [display_scale], [capture_scale], [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
, den Maßstab der Anzeige mitdisplay_scale
, den Maßstab der Bildschirmaufnahme mitcapture_scale
, und die maximale Aufnahmezeit des Bildschirmaufnahmevideos mitcapture_sec
.
z.B.pyxel.init(160, 120, title="My Pyxel App", fps=60, quit_key=pyxel.KEY_NONE, capture_scale=3, 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. -
flip()
Verschiebt den Bildschirm um ein Bild. Die Anwendung wird beendet, wenn die TasteEsc
gedrückt wird. Diese Funktion funktioniert nur auf Nicht-Web-Plattformen. -
quit()
Beende das Pyxel-Programm.
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. Wenn eine gleichnamige Palettendatei (.pyxpal) am gleichen Ort wie die Ressourcendatei vorhanden ist, wird die Farbe der Palettenanzeige ebenfalls geändert. Die Palettendatei ist ein hexadezimaler Eintrag der Anzeigefarben, getrennt durch Zeilenumbrüche. Die Palettendatei kann auch verwendet werden, um die im Pyxel Editor angezeigten Farben zu ändern.
-
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
(Liste der Schlüsseldefinitionen) -
btnp(key, [hold], [repeat])
ReturnTrue
fallskey
gedrückt ist, sonst returnFalse
. Wennhold
undrepeat
angegeben sind, wirdTrue
amrepeat
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.old_colors = pyxel.colors.to_list(); pyxel.colors.from_list([0x111111, 0x222222, 0x333333]); pyxel.colors[15] = 0x112233
-
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()
-
camera(x, y)
Change the upper left corner coordinates of the screen to (x
,y
). Reset the upper left corner coordinates to (0
,0
) withcamera()
. -
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
) -
elli(x, y, w, h, col)
Zeichne eine Ellipse mit der Breitew
, der Höheh
und der Farbecol
von (x
,y
). -
ellib(x, y, w, h, col)
Zeichne den Umriss einer Ellipse der Breitew
, der Höheh
und der Farbecol
von (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
-
fill(x, y, col)
Zeichne eine Ellipse mit der Breitew
, der Höheh
und der Farbecol
von (x
,y
). -
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])
Kopiert den Bereich der Größe (w
,h
) von (u
,v
) der Tilemaptm
(0-7) nach (x
,y
). Wenn ein negativer Wert fürw
und/oderh
angegeben wird, wird es horizontal und/oder vertikal umgekehrt. Wenncolkey
angegeben ist, wird es als transparente Farbe behandelt. Die Größe einer Kachel ist 8x8 Pixel und wird in einer Tilemap als Tupel von(tile_x, tile_y)
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, [tick], [loop])
Spielt den Tonsnd
(0-63) auf Kanalch
(0-3). Die Startposition der Wiedergabe kann durchtick
(1 tick = 1/120 Sekunden) angegeben werden. Fallssnd
eine Liste ist, wird es in der Reihenfolge abgespielt. FallsTrue
fürloop
angeben ist, wird eine Schleifenwiedergabe durchgeführt. -
playm(msc, [tick], [loop])
Spielt die Musikmsc
(0-7). Die Startposition der Wiedergabe kann durchtick
(1 tick = 1/120 Sekunden) angegeben werden. 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.
-
ceil(x)
Gibt die kleinste ganze Zahl größer oder gleichx
zurück. -
floor(x)
Gibt die größte ganze Zahl kleiner oder gleichx
zurück. -
sgn(x)
Gibt 1 zurück, wennx
positiv ist, 0, wenn es Null ist, und -1, wenn es negativ ist. -
sqrt(x)
Gibt die Quadratwurzel vonx
zurück. -
sin(deg)
Gibt den Sinus vondeg
Grad zurück. -
cos(deg)
Gibt den Kosinus vondeg
Grad zurück. -
atan2(y, x)
Gibt den Arkustangens vony
/x
in Grad zurück. -
rseed(seed: int)
Setzt den Seed des Zufallszahlengenerators. -
rndi(a, b)
Gibt eine zufällige ganze Zahl zurück, die größer oder gleicha
und kleiner oder gleichb
ist. -
rndf(a, b)
Gibt eine zufällige Dezimalzahl zurück, die größer oder gleicha
und kleiner oder gleichb
ist. -
nseed(seed)
Setzt den Seed des Perlin-Rauschens. -
noise(x, [y], [z])
Gibt den Perlin-Rauschwert für die angegebenen Koordinaten zurück.
-
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, ["0123", "4567", "89ab", "cdef"])
-
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, ["0000 0100 a0b0", "0001 0101 a1b1"])
-
pget(x, y)
Gibt die Tile bei (x
,y
). Ein Tile ist eine Tuple von(tile_x, tile_y)
. -
pset(x, y, tile)
Zeichne einetile
bei (x
,y
). Ein Tile ist eine Tuple von(tile_x, tile_y)
.
-
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'+'#-'+'01234' oder 'R'. Groß- und Kleinschreibung sowie Leerzeichen werden ignoriert.
z.B.pyxel.sound(0).set_notes("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_tones("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_volumes("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_effects("NFNF NVVS")
-
snds_list
Zweidimensionale Liste von Klängen (0-63) mit der Anzahl der Kanäle. -
set(snds0, snds1, snds2, snds3)
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.
Pyxel sucht Sponsoren auf GitHub Sponsors. Ziehen Sie in Erwägung, Pyxel für die fortlaufende Wartung und Funktionserweiterungen zu sponsern. Sponsoren können sich über Pyxel als Vorteil beraten. Weitere Informationen finden Sie hier.