[ English | 中文 | Español | Italiano | 日本語 | 한국어 | Português | Русский ]
Pyxel è un game engine rétro per Python.
Grazie alle sue specifiche limitate ispirate dalle console di videogiochi rétro, come al fatto che solo 16 colori possono essere mostrati e solo 4 suoni possono essere suonati allo stesso tempo, puoi sentirti libero di creare giochi stile pixel art.
Le specifiche della console di gioco e API per Pyxel si riferiscono ai mozzafiato PICO-8 e TIC-80.
Pyxel è open source e libero da usare. Cominciamo a fare giochi rétro con Pyxel!
- Funziona su Windows, Mac, e Linux
- Codice si scrive con Python3
- Palette di 16 colori fissi
- 3 banche di immagini di dimensioni 256x256
- 8 tilemap di dimensioni 256x256
- 4 canali con 64 suoni definibili
- 8 musiche che possono combinare suoni arbitrari
- Input di tastiera, mouse, e controller
- Editor suoni e immagini
Prima di tutto, installa Python3 (versione 3.6.8 o maggiore).
Una volta che hai installato Python con l'installer ufficiale, aggiungi Python alla PATH selezionando il tasto mostrato qui:
Dopo, installa Pyxel con il comando pip
seguente dalla linea di comando:
pip install -U pyxel
Prima di tutto, nell'ambiente dove è installato Homebrew installa Python3 (versione 3.6.8 o maggiore) e i pacchetti necessari con il comando seguente:
brew install python3 gcc sdl2 sdl2_image gifsicle
Si può installare Python3 in altri modi, ma tieni conto che bisognerebbe installare altre librerie.
Dopo, riavvia il terminale e installa Pyxel con il comando pip3
:
pip3 install -U pyxel
Installa Python3 (versione 3.6.8 o maggiore) e i pacchetti necessari nel modo appropriato per ogni distribuzione.
Ubuntu:
sudo apt install python3 python3-pip libsdl2-dev libsdl2-image-dev gifsicle
sudo -H pip3 install -U pyxel
Per installare Pyxel in un ambiente diverso da quelli precedenti (32-bit Linux, Raspberry PI, ecc.), segui i procedimenti seguenti per compilare:
- Toolchain compilazione C++ (dovrebbe includere i comandi gcc e make)
- libsdl2-dev e libsdl2-image-dev
- Python3 (versione 3.6.8 o maggiore) e comando pip
git clone https://github.com/kitao/pyxel.git
cd pyxel
make -C pyxel/core clean all
pip3 install .
Dopo aver installato Pyxel, gli esempi di Pyxel saranno copiati nella corrente cartella con il comando seguente:
install_pyxel_examples
Gli esempi da copiare sono i seguenti:
- 01_hello_pyxel.py - Applicazione più semplice
- 02_jump_game.py - Un gioco di salto con file Pyxel di risorsa
- 03_draw_api.py - Dimostrazione dell'API di disegno
- 04_sound_api.py - Dimostrazione dell'API di suono
- 05_color_palette.py - Lista di colori nella palette
- 06_click_game.py - Gioco punta e clicca
- 07_snake.py - Gioco snake con colonna sonora
- 08_triangle_api.py - Dimostrazione dell'API di disegno triangoli
- 09_shooter.py - Gioco shoot'em up con transizioni schermo
Gli esempi possono essere eseguiti come qualsiasi file python:
Windows:
cd pyxel_examples
python 01_hello_pyxel.py
Mac / Linux:
cd pyxel_examples
python3 01_hello_pyxel.py
Dopo aver importato il modulo Pyxel nel tuo codice python, Specifica la dimensione della finestra con la funzione init
, poi avvia l'applicazione Pyxel con la funzione 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)
I parametri della funzione run
sono passate alla funzione update
per aggiornare ogni frame e alla funzione draw
per disegnare lo schermo quando necessario.
In una effettiva applicazione, è consigliato ricoprire codice pyxel in una classe come qui sotto:
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()
Si può anche scrivere codice semplice usando le funzioni show
e flip
per disegnare grafiche e animazioni semplici.
La funzione show
mostra lo schermo e aspetta fino a che il tasto ESC
non sia premuto.
import pyxel
pyxel.init(120, 120)
pyxel.cls(1)
pyxel.circb(60, 60, 40, 7)
pyxel.show()
La funzione flip
aggiorna lo schermo una volta.
import pyxel
pyxel.init(120, 80)
while True:
pyxel.cls(3)
pyxel.rectb(pyxel.frame_count % 160 - 40, 20, 40, 40, 7)
pyxel.flip()
I controlli seguenti speciali possono essere eseguite mentre viene eseguita un'applicazione Pyxel:
Esc
Esci dall'applicazioneAlt(Option)+1
Salva uno screenshot sul desktopAlt(Option)+2
Resetta il tempo d'inizio della registrazione schermoAlt(Option)+3
Salva la registrazione schermo (gif) sul desktop (fino a 30 secondi)Alt(Option)+0
Alterna il monitor di performance (fps, tempo d'aggiornamento, e tempo di disegno)Alt(Option)+Enter
Alterna schermo intero
Il Pyxel editor incluso può creare suoni ed immagini usate in un'applicazione Pyxel.
L'editor Pyxel è avviato con il comando seguente:
pyxeleditor [pyxel_resource_file]
Se il file di risorsa Pyxel (.pyxres) specificato esiste, allora il file viene caricato, e se non esiste, un nuovo file con quel nome viene creato.
Se il file risorsa viene omesso, il nome è my_resource.pyxres
.
Dopo aver avviato l'editor Pyxel, il file può essere cambiato trascinando un'altro file risorsa. Se il file risorsa viene trascinato quando il tasto Ctrl
(Cmd
) è premuto, solo il tipo di risorsa corrente (immagine/tilemap/suono/musica) che sta venendo modificata sarà caricato. Questa operazione permette di combinare multipli file risorsa in uno.
Il file risorsa creato può essere caricato con la funzione load
.
L'editor Pyxel ha le seguenti modalità di modifica.
Editor Immagini:
La modalità per modificare banche d'immagini.
Trascinando un file png sullo schermo dell'editor immagini, l'immagine può essere caricata nella banca immagini selezionata.
Editor Tilemap:
La modalità per modificare tilemap immagini delle banche immagini sono posizionate in un modo a piastrelle.
Editor Suoni:
Modalità per modificare suoni.
Editor Musica:
La modalità per modificare musica in cui i suoni sono posizionati in ordine per poi essere risuonati.
Immagini e tilemap Pyxel possono anche essere creati nei modi seguenti:
- Crea un'immagine da una lista di stringhe con le funzioni
Image.set
oTilemap.set
- Carica un file png nella palette Pyxel con la funzione
Image.load
Suoni Pyxel possono anche essere creati nel modo seguente:
- Creare un suono da una stringa con le funzioni
Sound.set
oMusic.set
Riferirsi al manuale dell'API per l'uso di queste funzioni.
Usando il Pyxel Packager incluso, un eseguibile stand-alone che funzionerà anche in ambienti dove python non è installato può essere creato.
Per creare un eseguibile stand-alone, nell'ambiente dove è installato PyInstaller , specificare il file Python da essere usato per avviare l'applicazione con il comando pyxelpackager
come segue:
pyxelpackager python_file
Quando il procedimento è completo, un eseguibile stand-alone è creato nella cartella dist
Se le risorce come file .pyxres e .png sono necessari, metterli nella cartella assets
e saranno inclusi.
Si può anche specificare un'icona con l'opzione -i icon_file
.
-
width
,height
Lunghezza e altezza dello schermo -
frame_count
Numero di frame passati -
init(width, height, [caption], [scale], [palette], [fps], [quit_key], [fullscreen])
Inizializza l'applicazione Pyxel con la grandezza schermo (width
,height
). La grandezza massima dello schermo è 256
Si può anche specificare il titolo della finestra concaption
, la magnificazione del display conscale
, il colore di palette conpalette
, il framerate confps
, la chiave per uscire dall'applicazione conquit_key
, e se iniziare l'applicazione a schermo intero confullscreen
.palette
è definita come una lista di 16 elementi di colori a 24 bit.
per esempio:pyxel.init(160, 120, caption="Pyxel with PICO-8 palette", palette=[0x000000, 0x1D2B53, 0x7E2553, 0x008751, 0xAB5236, 0x5F574F, 0xC2C3C7, 0xFFF1E8, 0xFF004D, 0xFFA300, 0xFFEC27, 0x00E436, 0x29ADFF, 0x83769C, 0xFF77A8, 0xFFCCAA], quit_key=pyxel.KEY_NONE, fullscreen=True)
-
run(update, draw)
Inizia l'applicazione Pyxel e chiama la funzioneupdate
per aggiornare il frame e la funzionedraw
per disegnare -
quit()
Uscire dall'applicazione Pyxel alla fine del frame corrente -
flip()
Forza il disegno dello schermo (non usare in applicazioni normali) -
show()
Disegna lo schermo e aspetta per sempre (non usare in applicazioni normali)
-
save(filename)
Salva il file risorsa (.pyxres) nella cartella d'esecuzione dello script -
load(filename, [image], [tilemap], [sound], [music])
Leggi il file risorsa (.pyxres) dalla cartella d'esecuzione dello script. SeFalse
è specificato per il tipo di risorsa (immagine/tilemap/suono/musica), la risorsa non sarà caricata.
-
mouse_x
,mouse_y
La posizione corrente del cursore del mouse -
mouse_wheel
Il valore corrente della rotella del mouse -
btn(key)
RitornaTrue
sekey
è premuto, altrimenti ritornaFalse
(lista definizione tasti) -
btnp(key, [hold], [period])
RitornaTrue
sekey
è premuto quel frame, altrimenti ritornaFalse
. Quandohold
eperiod
sono specificati,True
sarà ritornato all'intervallo frameperiod
quandokey
è premuto per più dihold
frame -
btnr(key)
RitornaTrue
sekey
è rilasciato quel frame, altrimenti ritornaFalse
-
mouse(visible)
Sevisible
èTrue
, mostra il cursore mouse. SeFalse
, nascondilo. Anche se il cursore mouse non è mostrato, la sua posizione è aggiornata.
-
image(img, [system])
Opera la banca immaginiimg
(0-2) (vedere la classe Image). Sesystem
èTrue
, la banca immagine per il sistema può essere acquisito. 3 è per il font e l'editor risorse. 4 è per lo schermo del display
per esempio:pyxel.image(0).load(0, 0, "title.png")
-
tilemap(tm)
Opera la tilemaptm
(0-7) (vedere la classe Tilemap) -
clip(x, y, w, h)
Imposta l'area di disegno dello schermo da (x
,y
) a lunghezzaw
e altezzah
. Resettare l'area di disegno a schermo intero conclip()
-
pal(col1, col2)
Rimpiazza colorecol1
concol2
al momento di disegno.pal()
per tornare alla palette iniziale -
cls(col)
Riempie lo schermo concol
-
pget(x, y)
Ritorna il colore del pixel su (x
,y
) -
pset(x, y, col)
Disegna un pixel di colorecol
su (x
,y
) -
line(x1, y1, x2, y2, col)
Disegna una linea di colorecol
da (x1
,y1
) a (x2
,y2
) -
rect(x, y, w, h, col)
Disegna un rettangolo con lunghezzaw
, altezzah
e colorecol
da (x
,y
) -
rectb(x, y, w, h, col)
Disegna il contorno di un rettangolo di lunghezzaw
, altezzah
e colorecol
da (x
,y
) -
circ(x, y, r, col)
Disegna un cerchio di raggior
e colorecol
su (x
,y
) -
circb(x, y, r, col)
Disegna il contorno di un cerchio di raggior
e colorecol
su (x
,y
) -
tri(x1, y1, x2, y2, x3, y3, col)
Disegna un triangolo con vertici (x1
,y1
), (x2
,y2
), (x3
,y3
) e colorecol
-
trib(x1, y1, x2, y2, x3, y3, col)
Disegna il contorno di un triangolo con vertici (x1
,y1
), (x2
,y2
), (x3
,y3
) e colorecol
-
blt(x, y, img, u, v, w, h, [colkey])
Copia la regione di grandezza (w
,h
) da (u
,v
) della banca immaginiimg
(0-2) a (x
,y
). Se un valore negativo è impostato perw
e/oh
, sarà invertito orizzontalmente o verticalmente. Secolkey
è specificato, verrà trattato come colore trasparente
bltm(x, y, tm, u, v, w, h, [colkey])
Disegna la tilemaptm
(0-7) su (x
,y
) seguendo l'informazione delle piastrelle di grandezza (w
,h
) da (u
,v
). Secolkey
è specificato, verrà trattato come colore trasparente. Una piastrella della tilemap è disegnata con una grandezza di 8x8, e se il numero di piastrella è 0, indica la regione (0, 0)-(7, 7) della banca immagini, se 1, indica (8, 0)-(15, 0)
text(x, y, s, col)
Disegna una stringas
di colorecol
su (x
,y
)
-
sound(snd, [system])
Opera il suonosnd
(0-63) (Vedere classe Sound). Sesystem
èTrue
, the sound 64 for system can be accessed
per esempio:pyxel.sound(0).speed = 60
-
music(msc)
Opera la musicamsc
(0-7) (vedere la classe Music) -
play_pos(ch)
Dà la posizione del playback sonoro di canalech
. I 100 e 1000 indicano il numero di suono e gli 1 e 10 indicano il numero della nota. Quando il playback è finito, ritorna-1
-
play(ch, snd, loop=False)
Suonasnd
(0-63) sul canalech
(0-3). Suona in ordine quandosnd
è una lista -
playm(msc, loop=False)
Suona la musicamsc
(0-7) -
stop([ch])
Ferma playback di tutti i canali. Sech
(0-3) è specificato, ferma solo il canale corrispondente
-
width
,height
La lunghezza e l'altezza dell'immagine -
data
I dati dell'immagine (lista bidimensionale da 256x256) -
get(x, y)
Trova i dati dell'immagine su (x
,y
) -
set(x, y, data)
Imposta i dati dell'immagine su (x
,y
) da un valore o una lista di stringhe
per esempio:pyxel.image(0).set(10, 10, ["1234", "5678", "9abc", "defg"])
-
load(x, y, filename)
Leggi l'immagine png dalla cartella d'esecuzione dello script su (x
,y
) -
copy(x, y, img, u, v, w, h)
Copia la regione di grandezza (w
,h
) da (u
,v
) della banca immaginiimg
(0-2) a (x
,y
)
-
width
,height
Lunghezza e altezza della tilemap -
data
I dati della tilemap (lista bidimensionale da 256x256) -
refimg
La banca immagini che la tilemap prende in riferimento -
get(x, y)
Trova i dati della tilemap su (x
,y
) -
set(x, y, data)
Imposta i dati della tilemap su (x
,y
) da un valore o una lista di stringhe.
per esempio:pyxel.tilemap(0).set(0, 0, ["000102", "202122", "a0a1a2", "b0b1b2"])
-
copy(x, y, tm, u, v, w, h)
Copia la regione di grandezza (w
,h
) da (u
,v
) della tilemaptm
(0-7) a (x
,y
)
-
note
Lista di note(0-127) (33 = 'A2' = 440Hz) -
tone
Lista di toni(0:Triangolo / 1:Quadrato / 2:Impulso / 3:Rumore) -
volume
Lista di volume(0-7) -
effect
Lista di effetti(0:Nessuno / 1:Scivolo / 2:Vibrato / 3:Sfumato in uscita) -
speed
Lunghezza di una nota(120 = 1 second per tone) -
set(note, tone, volume, effect, speed)
Imposta una nota, tono, volume, ed effetto con una stringa. Se la lunghezza del tono, volume o effetto è minore della lunghezza della nota, è ripetuto dall'inizio -
set_note(note)
Imposta la nota con una stringa fatta da 'CDEFGAB'+'#-'+'0123' o 'R'. Non sensibile al maiuscolo e gli spazi sono ignorati
per esempio:pyxel.sound(0).set_note("G2B-2D3R RF3F3F3")
-
set_tone(tone)
Imposta il tono con una stringa fatta da 'TSPN'. Non sensibile al maiuscolo e gli spazi sono ignorati
e.g.pyxel.sound(0).set_tone("TTSS PPPN")
-
set_volume(volume)
Imposta il volume con una stringa fatta da '01234567'. Non sensibile al maiuscolo e gli spazi sono ignorati
e.g.pyxel.sound(0).set_volume("7777 7531")
-
set_effect(effect)
Imposta l'effetto con una stringa fatta da 'NSVF'. Non sensibile al maiuscolo e gli spazi sono ignorati
e.g.pyxel.sound(0).set_effect("NFNF NVVS")
-
ch0
Lista di sound(0-63) suonata su canale 0. Se è specificata una lista vuota, il canale non è usato per playback -
ch1
Lista di sound(0-63) suonata su canale 1. Se è specificata una lista vuota, il canale non è usato per playback -
ch2
Lista di sound(0-63) suonata su canale 2. Se è specificata una lista vuota, il canale non è usato per playback -
ch3
Lista di sound(0-63) suonata su canale 3. Se è specificata una lista vuota, il canale non è usato per playback -
set(ch0, ch1, ch2, ch3)
Imposta la lista di sound(0-63) di tutti i canali. Se è specificata una lista vuota, il canale non è usato per playback
per esempio:pyxel.music(0).set([0, 1], [2, 3], [4], [])
-
set_ch0(data)
Imposta la lista di sound(0-63) di canale 0 -
set_ch1(data)
Imposta la lista di sound(0-63) di canale 1 -
set_ch2(data)
Imposta la lista di sound(0-63) di canale 2 -
set_ch3(data)
Imposta la lista di sound(0-63) di canale 3
Usare il tracciante di problemi per segnalare bug e richieste di miglioramenti/capacità nuove. Prima di emettere un nuovo problema, cerca nel tracciante di problemi per assicurarti che non ci siano problemi simili già aperti.
Quando emettendo un problema, selezionare un template da questo link.
Chiunque che testi il codice manualmente e segnali bug o consigli per miglioramenti nel tracciante di problemi sono benvenuti!
Patch/fix sono accettati in forma di pull request (PR). Assicurarsi che il problema per cui si emetta una pull request sia aperto nel tracciante di problemi.
Le pull request emesse sono presupposte di accettare di essere pubblicate sotto la licenza MIT.
Pyxel è sotto la licenza MIT. Può essere riusato in software proprietario affinche tutte le copie del software includano una copia dei termini della licenza MIT e dei notice di copyright.
Pyxel usa il software seguente: