[ English | 中文 | Deutsch | Español | Français | 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 riprodotti allo stesso tempo, puoi sentirti libero di creare giochi stile pixel art.
Le specifiche e le API di Pyxel sono ispirate da PICO-8 e TIC-80.
Pyxel è open source e libero da usare. Cominciamo a fare giochi rétro con Pyxel!
- Funziona su Windows, Mac, Linux e Web
- Programmazione con Python
- Palette a 16 colori
- 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
Dopo aver installato Python3 (versione 3.7 o superiore), eseguire il seguente comando:
pip install -U pyxel
Dopo aver installato Python3 (versione 3.7 o superiore), eseguire il seguente comando:
pip3 install -U pyxel
Dopo aver installato il pacchetto SDL2 (libsdl2-dev
per Ubuntu), Python3 (versione 3.7 o superiore), e python3-pip
, eseguire il seguente comando:
sudo pip3 install -U pyxel
Se quanto sopra non funziona, provare ad autocostruirsi secondo le istruzioni di Makefile.
Utilizzando il Pyxel Web Launcher o gli elementi personalizzati per l'HTML, è possibile eseguire Pyxel in un browser web senza alcuna installazione.
Per istruzioni specifiche, consultare questa pagina.
Dopo aver installato Pyxel, gli esempi di Pyxel saranno copiati nella corrente cartella con il comando seguente:
pyxel copy_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 delle API di disegno
- 04_sound_api.py - Dimostrazione delle API del 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 delle API per il disegno di un triangolo
- 09_shooter.py - Gioco shoot'em up con transizioni schermo
- 10_platformer.py - Gioco a piattaforme a scorrimento orizzontale con mappa
- 11_offscreen.py - Renderizzazione fuori campo con la classe Image
- 12_perlin_noise.py - Animazione del rumore di Perlin
- 30SecondsOfDaylight.pyxapp - Gioco vincitore del primo Pyxel Jam sviluppato da Adam
- megaball.pyxapp - Gioco arcade di palla basato sulla fisica sviluppato da Adam
Un esempio può essere eseguito con i seguenti comandi:
cd pyxel_examples
pyxel run 01_hello_pyxel.py
pyxel play 30SecondsOfDaylight.pyxapp
Dopo aver importato il modulo Pyxel nel tuo script Python, prima specifica la dimensione della finestra con la funzione init
, dopodichè lancia 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 passati alla funzione update
per aggiornare ogni frame e alla funzione draw
per disegnare lo schermo quando necessario.
In un'applicazione reale, è consigliato includere il 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()
Lo script Python creato può essere eseguito con il seguente comando:
pyxel run PYTHON_SCRIPT_FILE
Per la versione pacchettizzata, può essere eseguito come un normale script Python:
cd pyxel_examples
python3 PYTHON_SCRIPT_FILE
(Per Windows, digita python
anzichè python3
)
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 sul desktop (fino a 10 secondi)Alt(Option)+0
Alterna il monitor di performance (fps, tempo d'aggiornamento, e tempo di disegno)Alt(Option)+Enter
Alterna schermo intero
L'Editor Pyxel può creare immagini e suoni utilizzati in un'applicazione Pyxel.
Si avvia con il seguente comando:
pyxel edit [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 scambiato trascinando e rilasciando un altro file risorsa. Se il file risorsa è trascinato e rilasciato tenendo premuto il pulsante Ctrl(Cmd)
, sarà caricato solo il tipo di risorsa (Immagine/Tilemap/Suono/Musica) che si sta attualmente modificando. Questa operazione consente di combinare più 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 e rilasciando un file immagine (png/gif/jpeg) sullo schermo dell'Editor Immagine, l'immagine può essere caricata all'interno del banco d'immagine attualmente selezionato.
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.
Le immagini e le tilemap Pyxel possono essere create mediante i seguenti metodi:
- Creare un'immagine da una lista di stringhe con la funzione
Image.set
o la funzioneTilemap.set
- Caricare un file immagine (png/gif/jpeg) nella palette di Pyxel con la funzione
Image.load
I suoni Pyxel possono anche essere creati nel modo seguente:
- Creare un suono con le stringhe con la funzione
Sound.set
o la funzioneMusic.set
Riferirsi al manuale dell'API per l'uso di queste funzioni.
Pyxel supporta un formato file dedicato per la distribuzione dell'applicazione (Pyxel application file) che funziona su tutte le piattaforme.
Creare il file applicazione Pyxel (.pyxapp) con il seguente comando:
pyxel package APP_ROOT_DIR STARTUP_SCRIPT_FILE
Se l'applicazione dovrebbe includere risorse o moduli aggiuntivi, posizionarli nella cartella dell'applicazione.
Il file applicazione creato può essere eseguito con il seguente comando:
pyxel play PYXEL_APP_FILE
-
width
,height
Lunghezza e altezza dello schermo -
frame_count
Numero di frame passati -
init(width, height, [title], [fps], [quit_key], [display_scale], [capture_scale], [capture_sec])
Inizializza l'applicazione Pyxel con la dimensione dello schermo (width
,height
). I seguenti possono essere specificati come opzioni: il titolo della finestra contitle
, il frame rate confps
, il pulsante per uscire dall'applicazione conquit_key
, la scala del display condisplay_scale
, la scala della cattura dello schermo concapture_scale
, ed il tempo di registrazione massimo del video di cattura dello schermo concapture_sec
.
e.g.pyxel.init(160, 120, title="My Pyxel App", fps=60, quit_key=pyxel.KEY_NONE, capture_scale=3, capture_sec=0)
-
run(update, draw)
Avvia l'applicazione Pyxel e chiama la funzioneupdate
per l'aggiornamento del frame e la funzionedraw
per disegnare. -
show()
Mostra lo schermo e attende fino a quando il pulsanteEsc
non viene premuto. -
quit()
Esci dall'applicazione Pyxel.
load(filename, [image], [tilemap], [sound], [music])
Carica il file risorsa (.pyxres). SeFalse
è specificato per il tipo di risorsa (image/tilemap/sound/music
), 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], [repeat])
RitornaTrue
sekey
è premuto quel frame, altrimenti ritornaFalse
. Quandohold
erepeat
sono specificati,True
sarà ritornato all'intervallo framerepeat
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.
-
colors
Lista della palette colori del display. Il colore del display è specificato tramite un valore numerico a 24-bit. Usarecolors.from_list
ecolors.to_list
per assegnare direttamente e recuperare le liste Python.
e.g.org_colors = pyxel.colors.to_list(); pyxel.colors[15] = 0x112233; pyxel.colors.from_list(org_colors)
-
image(img)
Opera il banco immagineimg
(0-2). (Vedere la classe Image)
e.g.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()
-
camera(x, y)
Cambia le coordinate dell'angolo superiore sinistro dello schermo in (x
,y
). Resetta le coordinate dell'angolo superiore sinistro a (0
,0
) concamera()
. -
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
) -
elli(x, y, w, h, col)
Disegna un'ellisse di larghezzaw
, altezzah
e colorecol
da (x
,y
). -
ellib(x, y, w, h, col)
Disegna il contorno di un'ellisse di larghezzaw
, altezzah
e colorecol
da (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
-
fill(x, y, col)
Disegna un'ellisse di larghezzaw
, altezzah
e colorecol
da (x
,y
). -
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])
Copia la regione di dimensione (w
,h
) da (u
,v
) della tilemaptm
(0-7) a (x
,y
). Se un valore negativo è stato impostato perw
e/oh
, sarà rovesciata orizzontalmente e/o verticalmente. Secolkey
è specificato, viene trattato come colore trasparente. La dimensione di una tile tile è di 8x8 pixel ed è memorizzata in una tilemap come una tupla di(tile_x, tile_y)
.
text(x, y, s, col)
Disegna una stringas
di colorecol
su (x
,y
)
-
sound(snd)
Opera il suonosnd
(0-63). (Vedere classe Sound).
per esempio:pyxel.sound(0).speed = 60
-
music(msc)
Opera la musicamsc
(0-7) (Vedere la classe Music) -
play_pos(ch)
Ottiene la posizione del suono in riproduzione del canalech
(0-3) come una tupla di(sound no, note no)
. RitornaNone
quando la riproduzione è interrotta. -
play(ch, snd, [tick], [loop])
Riproduce il suonosnd
(0-63) sul canalech
(0-3). Sesnd
è una lista, verrà riprodotta in ordine. La posizione di inizio della riproduzione può essere specificata datick
(1 tick = 1/120 secondi). SeTrue
è specificato perloop
, viene eseguita la riproduzione in loop. -
playm(msc, [tick], [loop])
Riproduce la musicamsc
(0-7). La posizione di inizio della riproduzione può essere specificata datick
(1 tick = 1/120 secondi). SeTrue
è specificato perloop
, viene eseguita la riproduzione in loop. -
stop([ch])
Interrompe la riproduzione del canalech
(0-3) specificato.stop()
per interrompere tutti i canali.
-
ceil(x)
Restituisce il più piccolo intero maggiore o uguale ax
. -
floor(x)
Restituisce il più grande intero minore o uguale ax
. -
sgn(x)
Restituisce 1 quandox
è positivo, 0 quando è zero e -1 quando è negativo. -
sqrt(x)
Restituisce la radice quadrata dix
. -
sin(deg)
Restituisce il seno dideg
gradi. -
cos(deg)
Restituisce il coseno dideg
gradi. -
atan2(y, x)
Restituisce l'arcotangente diy
/x
in gradi. -
rseed(seed: int)
Imposta il seme del generatore di numeri casuali. -
rndi(a, b)
Restituisce un numero intero casuale maggiore o uguale aa
e minore o uguale ab
. -
rndf(a, b)
Restituisce un decimale casuale maggiore o uguale aa
e minore o uguale ab
. -
nseed(seed)
Imposta il seme del rumore di Perlin. -
noise(x, [y], [z])
Restituisce il valore del rumore di Perlin per le coordinate specificate.
-
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 l'immagine a (x
,y
) tramite una lista di stringhe.
e.g.pyxel.image(0).set(10, 10, ["0123", "4567", "89ab", "cdef"])
-
load(x, y, filename)
Carica il file immagine (png/gif/jpeg) in (x
,y
).
-
width
,height
Lunghezza e altezza della tilemap -
refimg
Il banco immagine (0-2) referenziato dalla tilemap -
set(x, y, data)
Imposta la tilemap a (x
,y
) mediante una lista di stringhe.
e.g.pyxel.tilemap(0).set(0, 0, ["0000 0100 a0b0", "0001 0101 a1b1"])
-
pget(x, y)
Prende la tile in (x
,y
). Una tile è una tupla di(tile_x, tile_y)
. -
pset(x, y, tile)
Disegna unatile
in (x
,y
). Una tile è una tupla di(tile_x, tile_y)
.
-
notes
Lista di note (0-127). Più alto il numero, più alto il tono, e a 33 diventa 'A2'(440Hz). Il resto è -1. -
tones
Lista di tonalità (0:Triangolo / 1:Quadrato / 2:Ritmo / 3:Rumore) -
volumes
Lista di volumi (0-7) -
effects
Lista di effetti (0:Nessuno / 1:Scorrimento / 2:Vibrato / 3:Dissolvenza) -
speed
Velocità di riproduzione. 1 è il più veloce, e più grande è il numero, più è lenta la velocità di riproduzione. A 120, la lunghezza di una nota diventa 1 secondo. -
set(notes, tones, volumes, effects, speed)
Imposta note, tonalità, volumi, ed effetti con una stringa. Se il numero di tonalità, volumi, ed effetti è inferiore alle note, vengono ripetuti dall'inizio. -
set_notes(notes)
Imposta le note con una stringa composta da 'CDEFGAB'+'#-'+'0123' o 'R'. Case-insensitive e gli spazi bianchi sono ignorati.
e.g.pyxel.sound(0).set_notes("G2B-2D3R RF3F3F3")
-
set_tones(tones)
Imposta le tonalità con una stringa formata da 'TSPN'. Case-insensitive e gli spazi bianchi sono ignorati.
e.g.pyxel.sound(0).set_tones("TTSS PPPN")
-
set_volumes(volumes)
Imposta i volumi con una stringa formata da '01234567'. Case-insensitive e gli spazi bianchi sono ignorati.
e.g.pyxel.sound(0).set_volumes("7777 7531")
-
set_effects(effects)
Imposta gli effetti con una stringa formata da 'NSVF'. Case-insensitive e gli spazi bianchi sono ignorati.
e.g.pyxel.sound(0).set_effects("NFNF NVVS")
-
snds_list
Lista bidimensionale di suoni (0-63) con il numero di canali. -
set(snds0, snds1, snds2, snds3)
Imposta l'elenco di suoni (0-63) di tutti i canali. Se è indicata una lista vuota, quel canale non viene utilizzato per la riproduzione.
e.g.pyxel.music(0).set([0, 1], [2, 3], [4], [])
Pyxel ha "API avanzate" che non sono menzionate in questa documentazione perchè "potrebbero confondere gli utenti" oppure "necessitano di conoscenze specifiche per poter essere utilizzate".
Se ti senti confidente sulle tue competenze, prova a creare lavori incredibili con this come idea!
Usa l'Issue Tracker per inviare segnalazioni su bug e richieste di funzionalità/migliorie. Prima di inviare una nuova issue, assicurati che non ci sia una issue simile aperta.
Chiunque è il benvenuto per testare manualmente il codice e riportare bug o suggerimenti per miglioramenti nell'Issue Tracker!
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 Licenza MIT. Può essere riutilizzato all'interno di software proprietario, stabilito che tutte le copie del software o di sue porzioni sostanziali includano una copia dei termini della Licenza MIT ed anche un avviso di copyright.
Pyxel è alla ricerca di sponsor su GitHub Sponsor. Prendi in considerazione la sponsorizzazione di Pyxel per la manutenzione continua e l'aggiunta di funzionalità. Gli sponsor possono consultare Pyxel come vantaggio. Si prega di vedere qui per i dettagli.