[ English | 中文 | Deutsch | Español | Français | Italiano | 日本語 | 한국어 | Português | Русский | Türkçe | Українська ]
Pyxel est un moteur de jeu rétro pour Python.
Les spécifications sont inspirées des consoles de jeux rétro, comme le fait de n'afficher que 16 couleurs et de prendre en charge 4 canaux audio, vous permettant ainsi de profiter facilement de la création de jeux au style pixel art.
Le développement de Pyxel est motivé par les retours des utilisateurs. Merci de donner une étoile à Pyxel sur GitHub !
Les spécifications et les API de Pyxel s'inspirent de PICO-8 et de TIC-80.
Pyxel est open source sous la Licence MIT et est gratuit à utiliser. Commençons à créer des jeux rétro avec Pyxel !
- Fonctionne sur Windows, Mac, Linux et Web
- Programmation en Python
- Palette de 16 couleurs
- 3 banques d'images de 256x256
- 8 cartes de tuiles de 256x256
- 4 canaux avec 64 sons définissables
- 8 pistes de musique qui peuvent combiner n'importe quel son
- Entrées de clavier, de souris et de manette
- Outils d'édition d'images et de sons
- Couleurs, canaux et banques extensibles par l'utilisateur
Après avoir installé Python3 (version 3.8 ou supérieure), exécutez la commande suivante :
pip install -U pyxel
Lors de l'installation de Python à l'aide de l'installateur officiel, assurez-vous de cocher l'option Add Python 3.x to PATH
pour activer la commande pyxel
.
Après avoir installé Homebrew, exécutez les commandes suivantes :
brew install pipx
pipx ensurepath
pipx install pyxel
Pour mettre à jour Pyxel après l'installation, exécutez pipx upgrade pyxel
.
Après avoir installé le paquet SDL2 (libsdl2-dev
pour Ubuntu), Python3 (version 3.8 ou supérieure) et python3-pip
, exécutez la commande suivante :
sudo pip3 install -U pyxel
Si la commande précédente échoue, envisagez de construire Pyxel à partir de la source en suivant les instructions dans le Makefile.
La version Web de Pyxel ne nécessite pas d'installation de Python ou de Pyxel et fonctionne sur des PC, des smartphones et des tablettes avec des navigateurs Web compatibles.
Pour des instructions détaillées, veuillez vous référer à cette page.
Après avoir installé Pyxel, vous pouvez copier les exemples dans le répertoire actuel avec la commande suivante :
pyxel copy_examples
Les exemples suivants seront copiés dans votre répertoire actuel :
01_hello_pyxel.py | L'application la plus simple | Démonstration | Code |
02_jump_game.py | Jeu de saut avec fichier de ressources Pyxel | Démonstration | Code |
03_draw_api.py | Démo des APIs de dessin | Démonstration | Code |
04_sound_api.py | Démo des APIs de son | Démonstration | Code |
05_color_palette.py | Liste de palettes de couleurs | Démonstration | Code |
06_click_game.py | Jeu de clic avec la souris | Démonstration | Code |
07_snake.py | Jeu de serpent avec BGM | Démonstration | Code |
08_triangle_api.py | Démo des APIs de dessin de triangles | Démonstration | Code |
09_shooter.py | Shoot 'em up avec transitions d'écran | Démonstration | Code |
10_platformer.py | Jeu de plateforme défilant horizontalement avec carte | Démonstration | Code |
11_offscreen.py | Rendu hors écran avec la classe Image | Démonstration | Code |
12_perlin_noise.py | Animation de bruit de Perlin | Démonstration | Code |
13_bitmap_font.py | Dessin d'une police bitmap | Démonstration | Code |
14_synthesizer.py | Synthétiseur utilisant des fonctions d'extension audio | Démonstration | Code |
15_tiled_map_file.py | Chargement et dessin d'un Tiled Map File (.tmx) | Démonstration | Code |
16_transform.py | Rotation et mise à l'échelle d'images | Démonstration | Code |
99_flip_animation.py | Animation avec la fonction flip (uniquement pour les plateformes non-web) | Démonstration | Code |
30sec_of_daylight.pyxapp | Jeu gagnant du 1er Pyxel Jam par Adam | Démonstration | Code |
megaball.pyxapp | Jeu de physique de balle d'arcade par Adam | Démonstration | Code |
8bit-bgm-gen.pyxapp | Générateur de musique de fond par frenchbread | Démonstration | Code |
Les exemples peuvent être exécutés avec les commandes suivantes :
cd pyxel_examples
pyxel run 01_hello_pyxel.py
pyxel play 30sec_of_daylight.pyxapp
Dans votre script Python, importez le module Pyxel, spécifiez la taille de la fenêtre avec la fonction init
, puis démarrez l'application Pyxel avec la fonction 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)
Les arguments de la fonction run
sont la fonction update
, qui traite les mises à jour de trames, et la fonction draw
, qui gère le dessin à l'écran.
Dans une application réelle, il est recommandé d'encapsuler le code Pyxel dans une classe, comme montré ci-dessous :
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()
Pour créer des graphiques simples sans animation, vous pouvez utiliser la fonction show
pour simplifier votre code.
import pyxel
pyxel.init(120, 120)
pyxel.cls(1)
pyxel.circb(60, 60, 40, 7)
pyxel.show()
Un script créé peut être exécuté en utilisant la commande python
:
python PYTHON_SCRIPT_FILE
Il peut également être exécuté avec la commande pyxel run
:
pyxel run PYTHON_SCRIPT_FILE
De plus, la commande pyxel watch
surveille les modifications dans un répertoire spécifié et relance automatiquement le programme lorsque des changements sont détectés :
pyxel watch WATCH_DIR PYTHON_SCRIPT_FILE
La surveillance du répertoire peut être arrêtée en appuyant sur Ctrl(Command)+C
.
Pendant l'exécution d'une application Pyxel, les opérations de touches spéciales suivantes peuvent être effectuées :
Esc
Quitter l'applicationAlt(Option)+1
Enregistrer la capture d'écran sur le bureauAlt(Option)+2
Réinitialiser le temps de début de l'enregistrement de la vidéo de capture d'écranAlt(Option)+3
Enregistrer une vidéo de capture d'écran sur le bureau (jusqu'à 10 secondes)Alt(Option)+8
ouA+B+X+Y+DL
sur la manette
Alterne le mode de mise à l’échelle de l’écran entre maximal et entierAlt(Option)+9
ouA+B+X+Y+DR
sur la manette
Passer d'un mode d'écran à l'autre (Crisp/Smooth/Retro)Alt(Option)+0
ouA+B+X+Y+DU
sur la manette
Basculer le moniteur de performance (FPS/update
temps/draw
temps)Alt(Option)+Enter
ouA+B+X+Y+DD
sur la manette
Basculer en plein écranShift+Alt(Option)+1/2/3
Enregistrer la banque d'images 0, 1 ou 2 sur le bureauShift+Alt(Option)+0
Enregistrer la palette de couleurs actuelle sur le bureau
Pyxel Editor peut créer des images et des sons utilisés dans une application Pyxel.
Vous pouvez démarrer Pyxel Editor avec la commande suivante :
pyxel edit PYXEL_RESOURCE_FILE
Si le fichier de ressources Pyxel spécifié (.pyxres) existe, il sera chargé. S'il n'existe pas, un nouveau fichier avec le nom spécifié sera créé. Si le fichier de ressources est omis, un nouveau fichier nommé my_resource.pyxres
sera créé.
Après avoir démarré Pyxel Editor, vous pouvez passer à un autre fichier de ressources en le faisant glisser et en le déposant sur Pyxel Editor.
Le fichier de ressources créé peut être chargé en utilisant la fonction load
.
Pyxel Editor a les modes d'édition suivants.
Éditeur d'images
Le mode pour éditer l'image dans chaque banque d'images.
Vous pouvez faire glisser et déposer un fichier d'image (PNG/GIF/JPEG) dans l'éditeur d'images pour charger l'image dans la banque d'images actuellement sélectionnée.
Éditeur de cartes de tuiles
Le mode pour éditer les cartes de tuiles qui organisent des images des banques d'images en un motif de tuiles.
Faites glisser et déposez un fichier TMX (Tiled Map File) sur l'éditeur de cartes de tuiles pour charger sa couche dans l'ordre de dessin correspondant au numéro de carte de tuiles actuellement sélectionné.
Éditeur de sons
Le mode pour éditer les sons utilisés pour les mélodies et les effets sonores.
Éditeur de musique
Le mode pour éditer des musiques dans lequel les sons sont organisés dans l'ordre de lecture.
Les images et les cartes de tuiles Pyxel peuvent également être créées en utilisant les méthodes suivantes :
- Créer une image à partir d'une liste de chaînes en utilisant la fonction
Image.set
ou la fonctionTilemap.set
- Charger un fichier d'image (PNG/GIF/JPEG) avec la palette Pyxel en utilisant la fonction
Image.load
Les sons Pyxel peuvent également être créés en utilisant la méthode suivante :
- Créer un son à partir de chaînes avec la fonction
Sound.set
ou la fonctionMusic.set
Référez-vous à la documentation de l'API pour l'utilisation de ces fonctions.
Pyxel prend en charge un format de fichier de distribution d'application dédié (fichier d'application Pyxel) qui est multiplateforme.
Un fichier d'application Pyxel (.pyxapp) est créé en utilisant la commande pyxel package
:
pyxel package APP_DIR STARTUP_SCRIPT_FILE
Si vous avez besoin d'inclure des ressources ou des modules supplémentaires, placez-les dans le répertoire de l'application.
Les métadonnées peuvent être affichées à l'exécution en les spécifiant dans le format suivant dans le script de démarrage. Les champs autres que title
et author
sont facultatifs.
# title: Pyxel Platformer
# author: Takashi Kitao
# desc: A Pyxel platformer example
# site: https://github.com/kitao/pyxel
# license: MIT
# version: 1.0
Le fichier d'application créé peut être exécuté en utilisant la commande pyxel play
:
pyxel play PYXEL_APP_FILE
Un fichier d'application Pyxel peut également être converti en un exécutable ou un fichier HTML en utilisant les commandes pyxel app2exe
ou pyxel app2html
.
-
width
,height
La largeur et la hauteur de l'écran -
frame_count
Le nombre d'images écoulées -
init(width, height, [title], [fps], [quit_key], [display_scale], [capture_scale], [capture_sec])
Initialise l'application Pyxel avec la taille de l'écran (width
,height
). Les options suivantes peuvent être spécifiées : le titre de la fenêtre avectitle
, le taux de rafraîchissement avecfps
, la touche pour quitter l'application avecquit_key
, l'échelle d'affichage avecdisplay_scale
, l'échelle de capture d'écran aveccapture_scale
, et le temps maximum d'enregistrement de la vidéo de capture d'écran aveccapture_sec
.
Exemple :pyxel.init(160, 120, title="My Pyxel App", fps=60, quit_key=pyxel.KEY_NONE, capture_scale=3, capture_sec=0)
-
run(update, draw)
Démarre l'application Pyxel et appelle la fonctionupdate
pour la mise à jour de l'image et la fonctiondraw
pour le dessin. -
show()
Affiche l'écran et attend que la toucheEsc
soit enfoncée. -
flip()
Rafraîchit l'écran d'une image. L'application se ferme lorsque la toucheEsc
est enfoncée. Cette fonction n'est pas disponible dans la version web. -
quit()
Ferme l'application Pyxel.
-
load(filename, [excl_images], [excl_tilemaps], [excl_sounds], [excl_musics])
Charge le fichier de ressources (.pyxres). Si une option est définie surTrue
, la ressource correspondante sera exclue du chargement. Si un fichier de palette (.pyxpal) portant le même nom existe au même endroit que le fichier de ressources, les couleurs de la palette seront également mises à jour. Le fichier de palette contient des entrées hexadécimales pour les couleurs d'affichage (par ex.1100FF
), séparées par des sauts de ligne. Le fichier de palette peut également être utilisé pour changer les couleurs affichées dans Pyxel Editor. -
user_data_dir(vendor_name, app_name)
Renvoie le répertoire de données utilisateur créé en fonction devendor_name
etapp_name
. Si le répertoire n'existe pas, il sera créé automatiquement. Il est utilisé pour stocker des scores élevés, la progression du jeu et des données similaires.
Exemple :print(pyxel.user_data_dir("Takashi Kitao", "Pyxel Shooter"))
-
mouse_x
,mouse_y
La position actuelle du curseur de la souris -
mouse_wheel
La valeur actuelle de la molette de la souris -
btn(key)
RenvoieTrue
si la touchekey
est enfoncée, sinon renvoieFalse
. (Liste des définitions de touches) -
btnp(key, [hold], [repeat])
RenvoieTrue
si la touchekey
est enfoncée à cette image, sinon renvoieFalse
. Sihold
etrepeat
sont spécifiés, après que la touchekey
ait été enfoncée pendanthold
images ou plus,True
est renvoyé toutes lesrepeat
images. -
btnr(key)
RenvoieTrue
si la touchekey
est relâchée à cette image, sinon renvoieFalse
. -
mouse(visible)
Affiche le curseur de la souris sivisible
estTrue
, et le masque sivisible
estFalse
. La position du curseur continue de se mettre à jour même lorsqu'il est masqué.
-
colors
Liste des couleurs de la palette. La couleur d'affichage est spécifiée par une valeur numérique de 24 bits. Utilisezcolors.from_list
etcolors.to_list
pour affecter et récupérer directement des listes Python.
Exemple :old_colors = pyxel.colors.to_list(); pyxel.colors.from_list([0x111111, 0x222222, 0x333333]); pyxel.colors[15] = 0x112233
-
images
Liste des banques d'images (instances de la classe Image) (0-2)
Exemple :pyxel.images[0].load(0, 0, "title.png")
-
tilemaps
Liste des cartes de tuiles (instances de la classe Tilemap) (0-7) Liste des cartes de tuiles (0-7) -
clip(x, y, w, h)
Définit la zone de dessin de l'écran à partir de (x
,y
) avec une largeur dew
et une hauteur deh
. Appelezclip()
pour réinitialiser la zone de dessin à plein écran. -
camera(x, y)
Change les coordonnées du coin supérieur gauche de l'écran en (x
,y
). Appelezcamera()
pour réinitialiser les coordonnées du coin supérieur gauche à (0
,0
). -
pal(col1, col2)
Remplace la couleurcol1
parcol2
lors du dessin. Appelezpal()
pour réinitialiser la palette initiale. -
dither(alpha)
Applique un tramage (pseudo-transparence) lors du dessin. Réglezalpha
dans la plage de0.0
à1.0
, où0.0
est transparent et1.0
est opaque. -
cls(col)
Efface l'écran avec la couleurcol
. -
pget(x, y)
Obtient la couleur du pixel à (x
,y
). -
pset(x, y, col)
Dessine un pixel de couleurcol
à (x
,y
). -
line(x1, y1, x2, y2, col)
Dessine une ligne de couleurcol
de (x1
,y1
) à (x2
,y2
). -
rect(x, y, w, h, col)
Dessine un rectangle de largeurw
, hauteurh
et couleurcol
à partir de (x
,y
). -
rectb(x, y, w, h, col)
Dessine le contour d'un rectangle de largeurw
, hauteurh
et couleurcol
à partir de (x
,y
). -
circ(x, y, r, col)
Dessine un cercle de rayonr
et de couleurcol
à (x
,y
). -
circb(x, y, r, col)
Dessine le contour d'un cercle de rayonr
et de couleurcol
à (x
,y
). -
elli(x, y, w, h, col)
Dessine une ellipse de largeurw
, hauteurh
et couleurcol
à partir de (x
,y
). -
ellib(x, y, w, h, col)
Dessine le contour d'une ellipse de largeurw
, hauteurh
et couleurcol
à partir de (x
,y
). -
tri(x1, y1, x2, y2, x3, y3, col)
Dessine un triangle avec des sommets à (x1
,y1
), (x2
,y2
), (x3
,y3
) et de couleurcol
. -
trib(x1, y1, x2, y2, x3, y3, col)
Dessine le contour d'un triangle avec des sommets à (x1
,y1
), (x2
,y2
), (x3
,y3
) et de couleurcol
. -
fill(x, y, col)
Remplit la zone connectée avec la même couleur que (x
,y
) avec la couleurcol
. -
blt(x, y, img, u, v, w, h, [colkey], [rotate], [scale])
Copie la région de taille (w
,h
) de (u
,v
) de la banque d'imagesimg
(0-2) vers (x
,y
). Si une valeur négative est assignée àw
et/ouh
, la région sera retournée horizontalement et/ou verticalement. Sicolkey
est spécifié, il sera traité comme une couleur transparente. Sirotate
(en degrés),scale
(1.0 = 100%) ou les deux sont spécifiés, les transformations correspondantes seront appliquées.
bltm(x, y, tm, u, v, w, h, [colkey], [rotate], [scale])
Copie la région de taille (w
,h
) de (u
,v
) de la carte de tuilestm
(0-7) vers (x
,y
). Si une valeur négative est assignée àw
et/ouh
, la région sera retournée horizontalement et/ou verticalement. Sicolkey
est spécifié, il sera traité comme une couleur transparente. Sirotate
(en degrés),scale
(1.0 = 100%) ou les deux sont spécifiés, les transformations correspondantes seront appliquées. La taille d'une tuile est de 8x8 pixels et est stockée dans une carte de tuiles sous forme de tuple(tile_x, tile_y)
.
text(x, y, s, col)
Dessine une chaînes
de couleurcol
à (x
,y
).
-
sounds
Liste des sons (instances de la classe Sound) (0-63)
Exemple :pyxel.sounds[0].speed = 60
-
musics
Liste des musiques (instances de la classe Music) (0-7) -
play(ch, snd, [tick], [loop], [resume])
Joue le sonsnd
(0-63) sur le canalch
(0-3). Sisnd
est une liste, les sons seront joués en séquence. La position de départ peut être spécifiée partick
(1 tick = 1/120 secondes). Siloop
est défini surTrue
, la lecture en boucle est activée. Pour reprendre le son précédent après la fin de la lecture, définissezresume
surTrue
. -
playm(msc, [tick], [loop])
Joue la musiquemsc
(0-7). La position de départ peut être spécifiée partick
(1 tick = 1/120 secondes). Siloop
est défini surTrue
, la lecture en boucle est activée. -
stop([ch])
Arrête la lecture du canal spécifiéch
(0-3). Appelezstop()
pour arrêter tous les canaux. -
play_pos(ch)
Obtient la position de lecture du son sur le canalch
(0-3) sous forme de tuple(sound_no, note_no)
. RenvoieNone
lorsque la lecture est arrêtée.
-
ceil(x)
Renvoie l'entier le plus petit qui est supérieur ou égal àx
. -
floor(x)
Renvoie l'entier le plus grand qui est inférieur ou égal àx
. -
sgn(x)
Renvoie1
six
est positif,0
s'il est égal à0
, et-1
s'il est négatif. -
sqrt(x)
Renvoie la racine carrée dex
. -
sin(deg)
Renvoie le sinus dedeg
degrés. -
cos(deg)
Renvoie le cosinus dedeg
degrés. -
atan2(y, x)
Renvoie l'arc-tangente dey
/x
en degrés. -
rseed(seed)
Définit la graine du générateur de nombres aléatoires. -
rndi(a, b)
Renvoie un entier aléatoire compris entrea
etb
inclus. -
rndf(a, b)
Renvoie un nombre flottant aléatoire compris entrea
etb
inclus. -
nseed(seed)
Définit la graine du bruit de Perlin. -
noise(x, [y], [z])
Renvoie la valeur du bruit de Perlin pour les coordonnées spécifiées.
-
width
,height
La largeur et la hauteur de l'image -
set(x, y, data)
Définit l'image à (x
,y
) à l'aide d'une liste de chaînes.
Exemple :pyxel.images[0].set(10, 10, ["0123", "4567", "89ab", "cdef"])
-
load(x, y, filename)
Charge un fichier image (PNG/GIF/JPEG) à (x
,y
). -
pget(x, y)
Obtient la couleur du pixel à (x
,y
). -
pset(x, y, col)
Dessine un pixel de couleurcol
à (x
,y
).
-
width
,height
La largeur et la hauteur de la carte de tuiles -
imgsrc
La banque d'images (0-2) référencée par la carte de tuiles -
set(x, y, data)
Définit la carte de tuiles à (x
,y
) à l'aide d'une liste de chaînes.
Exemple :pyxel.tilemap(0).set(0, 0, ["0000 0100 a0b0", "0001 0101 a1b1"])
-
load(x, y, filename, layer)
Charge la couche dans l'ordre de dessinlayer
(0-) à partir du fichier TMX (Tiled Map File) à (x
,y
). -
pget(x, y)
Obtient la tuile à (x
,y
). Une tuile est représentée sous forme de tuple(tile_x, tile_y)
. -
pset(x, y, tile)
Dessine unetuile
à (x
,y
). Une tuile est représentée sous forme de tuple(tile_x, tile_y)
.
-
notes
Liste de notes (0-127). Plus le nombre est élevé, plus la hauteur du son est aiguë. La note33
correspond à 'A2'(440Hz). Les notes de silence sont représentées par-1
. -
tones
Liste de tons (0:Triangle / 1:Square / 2:Pulse / 3:Noise) -
volumes
Liste de volumes (0-7) -
effects
Liste d'effets (0:None / 1:Slide / 2:Vibrato / 3:FadeOut / 4:Half-FadeOut / 5:Quarter-FadeOut) -
speed
Vitesse de lecture.1
est la plus rapide, et plus le nombre est élevé, plus la vitesse de lecture est lente. À120
, la durée d'une note est de 1 seconde. -
set(notes, tones, volumes, effects, speed)
Définit les notes, les tons, les volumes et les effets à l'aide d'une chaîne. Si la longueur des tons, volumes ou effets est inférieure à celle des notes, ils seront répétés à partir du début. -
set_notes(notes)
Définit les notes à l'aide d'une chaîne composée de 'CDEFGAB'+'#-'+'01234' ou 'R'. Insensible à la casse, et les espaces sont ignorés.
Exemple :pyxel.sounds[0].set_notes("G2B-2D3R RF3F3F3")
-
set_tones(tones)
Définit les tons avec une chaîne composée de 'TSPN'. Insensible à la casse, et les espaces sont ignorés.
Exemple :pyxel.sounds[0].set_tones("TTSS PPPN")
-
set_volumes(volumes)
Définit les volumes avec une chaîne composée de '01234567'. Insensible à la casse, et les espaces sont ignorés.
Exemple :pyxel.sounds[0].set_volumes("7777 7531")
-
set_effects(effects)
Définit les effets avec une chaîne composée de 'NSVFHQ'. Insensible à la casse, et les espaces sont ignorés.
Exemple :pyxel.sounds[0].set_effects("NFNF NVVS")
-
seqs
Une liste bidimensionnelle de sons (0-63) sur plusieurs canaux -
set(seq0, seq1, seq2, ...)
Définit les listes de sons (0-63) pour chaque canal. Si une liste vide est spécifiée, ce canal ne sera pas utilisé pour la lecture.
Exemple :pyxel.musics[0].set([0, 1], [], [3])
Pyxel inclut une "API Avancée" qui n'est pas mentionnée dans cette référence, car elle peut confondre les utilisateurs ou nécessiter des connaissances spécialisées pour son utilisation.
Si vous êtes confiant dans vos compétences, essayez de créer des œuvres étonnantes en utilisant cela comme guide !
Utilisez le Issue Tracker pour soumettre des rapports de bugs et des demandes de fonctionnalités ou d'améliorations. Avant de soumettre un nouveau problème, assurez-vous qu'il n'y a pas de problèmes ouverts similaires.
Toute personne qui teste manuellement le code et signale des bugs ou des suggestions d'améliorations dans le Issue Tracker est la bienvenue !
Les correctifs et modifications sont acceptés sous forme de demandes de tirage (PRs). Assurez-vous que le problème que la demande de tirage aborde est ouvert dans le Issue Tracker.
Soumettre une demande de tirage implique que vous acceptez de licencier votre contribution sous la Licence MIT.
Pyxel est sous la Licence MIT. Il peut être réutilisé dans des logiciels propriétaires, à condition que toutes les copies du logiciel ou de ses parties substantielles incluent une copie des termes de la Licence MIT et un avis de droit d'auteur.
Pyxel recherche des sponsors sur GitHub Sponsors. Veuillez envisager de soutenir Pyxel pour soutenir sa maintenance continue et le développement de fonctionnalités. En tant qu'avantage, les sponsors peuvent consulter directement le développeur de Pyxel. Pour plus de détails, veuillez visiter cette page.