[Anglais | 中文 | Deutsch | Español | Français | Italiano | 日本語 | 한국어 | Português | Русский | Türkçe | Українськ]
Pyxel est un moteur de jeu rétro pour Python.
Avec des spécifications simples inspirées des consoles de jeu rétro, comme afficher seulement 16 couleurs et soutenir 4 canaux sonores, vous pouvez facilement apprécier les jeux de style pixel-art.
Le développement de Pyxel est motivé par les commentaires des utilisateurs. Veuillez donner à Pyxel une étoile sur Github!
Les spécifications et les API de Pyxel sont inspirées par PICO-8 et TIC-80.
Pyxel est open source sous la licence MIT et gratuit. Commençons à faire des jeux rétro avec Pyxel!
Après l'installation de Python3 (version 3.8 ou supérieure), exécutez la commande suivante:
pip install -U pyxel
Lors de l'installation de Python à l'aide du programme d'installation officiel, assurez-vous de vérifier 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 à niveau Pyxel après l'installation, exécutez pipx upgrade pyxel
.
Après avoir installé le package SDL2 ( libsdl2-dev
pour Ubuntu), Python3 (version 3.8 ou supérieur) 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 s'exécute sur des PC, des smartphones et des tablettes avec des navigateurs Web pris en charge.
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 | Application la plus simple | Démo | Code |
02_jump_game.py | Jump Game avec le fichier de ressources Pyxel | Démo | Code |
03_draw_api.py | Démonstration des API de dessin | Démo | Code |
04_sound_api.py | Démonstration des API sonores | Démo | Code |
05_color_palette.py | Liste des palettes de couleurs | Démo | Code |
06_click_game.py | Jeu de clic de souris | Démo | Code |
07_snake.py | Jeu de serpent avec BGM | Démo | Code |
08_triangle_api.py | Démonstration des API de dessin triangle | Démo | Code |
09_shooter.py | Tir le jeu avec les transitions d'écran | Démo | Code |
10_platformrer.py | Jeu de plate-forme de défilement latérale avec carte | Démo | Code |
11_offscreen.py | Rendu hors écran avec classe d'image | Démo | Code |
12_perlin_noise.py | Animation de bruit perlin | Démo | Code |
13_bitmap_font.py | Dessin d'une police bitmap | Démo | Code |
14_SyntheSizer.py | Synthétiseur à l'aide de fonctionnalités d'extension audio | Démo | Code |
15_TILLED_MAP_FILE.py | Chargement et dessin d'un fichier de carte de carreaux (.tmx) | Démo | Code |
16_transform.py | Rotation et échelle d'image | Démo | Code |
99_flip_animation.py | Animation avec fonction Flip (plates-formes non Web uniquement) | Démo | Code |
30sec_of_daylight.pyxapp | 1er jeu gagnant de Pyxel Jam par Adam | Démo | Code |
megaball.pyxapp | Arcade Ball Physics Game par Adam | Démo | Code |
8bit-bgm-gen.pyxapp | Générateur de musique de fond par FrenchBread | Démo | 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 trame, et la fonction draw
, qui gère le dessin d'écran.
Dans une application réelle, il est recommandé d'envelopper le code pyxel dans une classe, comme indiqué 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é à l'aide de 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 rédige automatiquement le programme lorsque les modifications sont détectées:
pyxel watch WATCH_DIR PYTHON_SCRIPT_FILE
La surveillance du répertoire peut être arrêtée en appuyant sur Ctrl(Command)+C
.
Les actions de clés spéciales suivantes sont disponibles pendant l'exécution d'une application pyxel:
Esc
Alt(Option)+1
Alt(Option)+2
Alt(Option)+3
Alt(Option)+8
ou A+B+X+Y+DL
sur GamePadAlt(Option)+9
ou A+B+X+Y+DR
sur gamepadAlt(Option)+0
ou A+B+X+Y+DU
sur GamePadupdate
/ draw
)Alt(Option)+Enter
ou A+B+X+Y+DD
sur GamePadShift+Alt(Option)+1/2/3
Shift+Alt(Option)+0
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é à l'aide de la fonction load
.
Pyxel Editor a les modes d'édition suivants.
Éditeur d'image
Le mode de modification de l'image dans chaque banque d'images .
Vous pouvez faire glisser et supprimer un fichier image (png / gif / jpeg) dans l'éditeur d'image pour charger l'image dans la banque d'images actuellement sélectionnée.
Éditeur de carremap
Le mode d'édition de tilemaps qui organise des images des banques d'image dans un motif de carreaux.
Faites glisser et déposez un fichier TMX (fichier de carte carrelé) sur l'éditeur Tilemap pour charger sa couche dans l'ordre de dessin qui correspond au numéro Tilemap actuellement sélectionné.
Éditeur de son
Le mode de modification des sons utilisés pour les mélodies et les effets sonores.
Éditeur de musique
Le mode de modification des musiques dans lesquels les sons sont organisés par ordre de lecture.
Les images pyxel et les tilemaps peuvent également être créés en utilisant les méthodes suivantes:
Image.set
ou la fonction Tilemap.set
Image.load
functionLes sons pyxel peuvent également être créés en utilisant la méthode suivante:
Sound.set
Fonction ou Music.set
FonctionReportez-vous à la référence 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éé à l'aide de la commande pyxel package
:
pyxel package APP_DIR STARTUP_SCRIPT_FILE
Si vous devez inclure des ressources ou des modules supplémentaires, placez-les dans le répertoire des applications.
Les métadonnées peuvent être affichées au moment de l'exécution en le 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é à l'aide de la commande pyxel play
:
pyxel play PYXEL_APP_FILE
Un fichier d'application Pyxel peut également être converti en un fichier exécutable ou HTML à l'aide des commandes pyxel app2exe
ou pyxel app2html
.
width
, height
La largeur et la hauteur de l'écran
frame_count
Le nombre de cadres écoulés
init(width, height, [title], [fps], [quit_key], [display_scale], [capture_scale], [capture_sec])
Initialisez 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 avec title
, la fréquence d'images avec fps
, la clé pour quitter l'application avec quit_key
, l'échelle d'affichage avec display_scale
, l'échelle de capture d'écran avec capture_scale
et le temps d'enregistrement maximal de la capture d'écran Vidéo avec capture_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émarrez l'application Pyxel et appelez la fonction update
pour la mise à jour du trame et la fonction draw
pour le dessin.
show()
Affichez l'écran et attendez que la touche Esc
soit enfoncée.
flip()
Actualiser l'écran par un cadre. L'application sort lorsque la touche Esc
est enfoncée. Cette fonction n'est pas disponible dans la version Web.
quit()
Quittez l'application Pyxel.
load(filename, [excl_images], [excl_tilemaps], [excl_sounds], [excl_musics])
Chargez le fichier de ressources (.pyxres). Si une option est définie sur True
, la ressource correspondante sera exclue du chargement. Si un fichier de palette (.pyxpal) avec le même nom existe dans le même emplacement que le fichier de ressources, les couleurs d'affichage de la palette seront également mises à jour. Le fichier de palette contient des entrées hexadécimales pour les couleurs d'affichage (par exemple 1100FF
), séparées par Newlines. Le fichier de palette peut également être utilisé pour modifier les couleurs affichées dans l'éditeur Pyxel.
user_data_dir(vendor_name, app_name)
Renvoie le répertoire de données utilisateur créé en fonction de vendor_name
et app_name
. Si le répertoire n'existe pas, il sera créé automatiquement. Il est utilisé pour stocker des scores élevés, des progrès 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 roue de la souris
btn(key)
Renvoie True
si la key
est enfoncée, sinon renvoyez False
. (Liste de définition clé)
btnp(key, [hold], [repeat])
Renvoie True
si la key
est enfoncée dans ce cadre, sinon renvoyez False
. Si hold
et repeat
sont spécifiés, une fois que la key
a été maintenue pour les cadres hold
ou plus, True
est renvoyé à chaque trame repeat
.
btnr(key)
Renvoie True
si la key
est libérée dans ce cadre, sinon renvoyez False
.
mouse(visible)
Affichez le curseur de la souris si visible
est True
, et cachez-le si visible
est False
. La position du curseur continue de mettre à jour même lorsqu'elle est cachée.
colors
Liste des couleurs d'affichage de la palette. La couleur d'affichage est spécifiée par une valeur numérique 24 bits. Utilisez colors.from_list
et colors.to_list
pour attribuer et récupérer directement les 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'image (instances de la classe d'image) (0-2)
Exemple: pyxel.images[0].load(0, 0, "title.png")
tilemaps
Liste des Tilemaps (instances de la classe Tilemap) (0-7)
clip(x, y, w, h)
Réglez la zone de dessin de l'écran de ( x
, y
) avec une largeur de w
et une hauteur de h
. Appelez clip()
pour réinitialiser la zone de dessin en plein écran.
camera(x, y)
Changez les coordonnées du coin supérieur gauche de l'écran en ( x
, y
). Appelez camera()
pour réinitialiser les coordonnées du coin supérieur gauche à ( 0
, 0
).
pal(col1, col2)
Remplacez la couleur col1
par col2
lors du dessin. Appelez pal()
pour réinitialiser la palette initiale.
dither(alpha)
Appliquer le tramage (pseudo-transparence) lors du dessin. Réglez alpha
dans la plage de 0.0
à 1.0
, où 0.0
est transparent et 1.0
est opaque.
cls(col)
Écran transparent avec couleur col
.
pget(x, y)
Obtenez la couleur du pixel à ( x
, y
).
pset(x, y, col)
Dessinez un pixel de couleur col
à ( x
, y
).
line(x1, y1, x2, y2, col)
Dessinez une ligne de couleur col
de ( x1
, y1
) à ( x2
, y2
).
rect(x, y, w, h, col)
Dessinez un rectangle de largeur w
, hauteur h
et color col
de ( x
, y
).
rectb(x, y, w, h, col)
Dessinez le contour d'un rectangle de largeur w
, de hauteur h
et de couleur col
de ( x
, y
).
circ(x, y, r, col)
Dessinez un cercle de rayon r
et de couleur col
à ( x
, y
).
circb(x, y, r, col)
Dessinez le contour d'un cercle de rayon r
et de couleur col
à ( x
, y
).
elli(x, y, w, h, col)
Dessinez une ellipse de largeur w
, hauteur h
et color col
de ( x
, y
).
ellib(x, y, w, h, col)
Dessinez le contour d'une ellipse de largeur w
, hauteur h
et color col
de ( x
, y
).
tri(x1, y1, x2, y2, x3, y3, col)
Dessinez un triangle avec des sommets ( x1
, y1
), ( x2
, y2
), ( x3
, y3
) et de la couleur col
.
trib(x1, y1, x2, y2, x3, y3, col)
Dessinez le contour d'un triangle avec des sommets ( x1
, y1
), ( x2
, y2
), ( x3
, y3
) et de la couleur col
.
fill(x, y, col)
Remplissez la zone connectée avec la même couleur que ( x
, y
) avec une couleur col
.
blt(x, y, img, u, v, w, h, [colkey], [rotate], [scale])
Copiez la région de taille ( w
, h
) de ( u
, v
) de la banque d'images img
(0-2) à ( x
, y
). Si une valeur négative est attribuée à w
et / ou h
, la région sera retournée horizontalement et / ou verticalement. Si colkey
est spécifié, il sera traité comme une couleur transparente. Si rotate
(en degrés), scale
(1,0 = 100%), ou les deux sont spécifiées, les transformations correspondantes seront appliquées.
bltm(x, y, tm, u, v, w, h, [colkey], [rotate], [scale])
w
, h
) de ( u
, v
) du Tilemap tm
(0-7) à ( x
, y
). Si une valeur négative est attribuée à w
et / ou h
, la région sera retournée horizontalement et / ou verticalement. Si colkey
est spécifié, il sera traité comme une couleur transparente. Si rotate
(en degrés), scale
(1,0 = 100%), ou les deux sont spécifiées, les transformations correspondantes seront appliquées. La taille d'une tuile est de 8x8 pixels et est stockée dans un tilemap comme tuple de (image_tx, image_ty)
. text(x, y, s, col)
s
en couleur col
à ( x
, y
). sounds
Liste des sons (instances de la classe sonore) (0-63)
Exemple: pyxel.sounds[0].speed = 60
musics
Liste des musiques (instances de la classe de musique) (0-7)
play(ch, snd, [tick], [loop], [resume])
Jouez au son snd
(0-63) sur Channel ch
(0-3). Si snd
est une liste, les sons seront joués en séquence. La position de départ de la lecture peut être spécifiée par tick
(1 tick = 1/120 secondes). Si loop
est défini sur True
, la lecture de boucle est effectuée. Pour reprendre le son précédent après la fin de la lecture, définissez resume
sur True
.
playm(msc, [tick], [loop])
Jouez à la musique msc
(0-7). La position de départ de la lecture peut être spécifiée par tick
(1 tick = 1/120 secondes). Si loop
est défini sur True
, la lecture de boucle est effectuée.
stop([ch])
Arrêtez la lecture du canal spécifié ch
(0-3). Appelez stop()
pour arrêter tous les canaux.
play_pos(ch)
Obtenez la position de lecture sonore de Channel ch
(0-3) en tant que tuple de (sound_no, note_no)
. Renvoyez None
lorsque la lecture s'est arrêtée.
ceil(x)
Renvoyez le plus petit entier qui est supérieur ou égal à x
.
floor(x)
Renvoyez le plus grand entier qui est inférieur ou égal à x
.
sgn(x)
Retour 1
lorsque x
est positif, 0
quand il est 0
et -1
quand il est négatif.
sqrt(x)
Retournez la racine carrée de x
.
sin(deg)
Retournez le sinus de deg
degrés.
cos(deg)
Retournez le cosinus de deg
degrés.
atan2(y, x)
Retournez l'arctangent de y
/ x
en degrés.
rseed(seed)
Définit la graine du générateur de nombres aléatoires.
rndi(a, b)
Renvoyez un entier aléatoire supérieur ou égal à a
et inférieur ou égal à b
.
rndf(a, b)
Renvoie un nombre de points flottants aléatoires supérieur ou égal à a
et inférieur ou égal à b
.
nseed(seed)
Réglez la graine du bruit de perlin.
noise(x, [y], [z])
Renvoyez la valeur de bruit perlin pour les coordonnées spécifiées.
width
, height
La largeur et la hauteur de l'image
set(x, y, data)
Définissez l'image sur ( 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)
Chargez un fichier image (png / gif / jpeg) à ( x
, y
).
pget(x, y)
Obtenez la couleur du pixel à ( x
, y
).
pset(x, y, col)
Dessinez un pixel avec la couleur col
en ( x
, y
).
width
, height
La largeur et la hauteur du tilemap
imgsrc
La banque d'images (0-2) référencé par le Tilemap
set(x, y, data)
Réglez le carremap à ( 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)
Chargez la couche dans la layer
d'ordre de dessin (0-) dans le fichier TMX (fichier de carte carrelé) à ( x
, y
).
pget(x, y)
Obtenez la tuile à ( x
, y
). Une tuile est représentée comme un tuple de (image_tx, image_ty)
.
pset(x, y, tile)
Dessinez une tile
à ( x
, y
). Une tuile est représentée comme un tuple de (image_tx, image_ty)
.
notes
Liste des notes (0-127). Plus le nombre est élevé, plus la hauteur est élevée. La note 33
correspond à «A2» (440Hz). Les notes de repos sont représentées par -1
.
tones
Liste des tons (0: triangle / 1: carré / 2: Pulse / 3: bruit)
volumes
Liste des volumes (0-7)
effects
Liste des effets (0: Aucun / 1: Slide / 2: Vibrato / 3: Fadeout / 4: Malf-Fadeout / 5: Quarter-Fadeout)
speed
Vitesse de lecture. 1
est le plus rapide et plus le nombre est grand, plus la vitesse de lecture est ralentie. À 120
, la longueur d'une note devient 1 seconde.
set(notes, tones, volumes, effects, speed)
Définissez des notes, des tons, des volumes et des effets à l'aide d'une chaîne. Si la longueur des tons, des volumes ou des effets est plus courte que les notes, elles seront répétées dès le début.
set_notes(notes)
Définissez les notes à l'aide d'une chaîne faite de 'Cdefgab' + '# -' + '01234' ou 'r'. Il est insensible à la casse et l'espace est ignoré.
Exemple: pyxel.sounds[0].set_notes("G2B-2D3R RF3F3F3")
set_tones(tones)
Réglez les tons avec une chaîne en «tspn». Insensible à la cas et l'espace est ignoré.
Exemple: pyxel.sounds[0].set_tones("TTSS PPPN")
set_volumes(volumes)
Définissez les volumes avec une chaîne en «01234567». Insensible à la cas et l'espace est ignoré.
Exemple: pyxel.sounds[0].set_volumes("7777 7531")
set_effects(effects)
Définissez les effets avec une chaîne faite de «NSVFHQ». Insensible à la cas et l'espace est ignoré.
Exemple: pyxel.sounds[0].set_effects("NFNF NVVS")
seqs
Une liste de sons bidimensionnelle (0-63) sur plusieurs canaux
set(seq0, seq1, seq2, ...)
Définissez les listes de son (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 comprend 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 l'utiliser.
Si vous êtes confiant dans vos compétences, essayez de créer des œuvres incroyables en utilisant cela comme guide!
Utilisez le suivi du problème pour soumettre des rapports de bogues et des demandes de fonctionnalité ou d'amélioration. Avant de soumettre un nouveau problème, assurez-vous qu'il n'y a pas de problèmes ouverts similaires.
Quiconque teste manuellement le code et rapporte des bogues ou des suggestions d'amélioration du tracker du numéro est le bienvenu!
Les correctifs et les correctifs sont acceptés sous forme de demandes de traction (PRS). Assurez-vous que le problème Les adresses de la demande de traction sont ouvertes dans le tracker du numéro.
La soumission d'une demande de traction implique que vous acceptez de licencier votre contribution en vertu de la licence du MIT.
Pyxel est autorisé sous la licence du MIT. Il peut être réutilisé dans un logiciel propriétaire, à condition que toutes les copies du logiciel ou de ses parties substantielles comprennent une copie des conditions de licence MIT et un avis de droit d'auteur.
Pyxel recherche des sponsors sur les sponsors GitHub. Veuillez envisager de parrainer Pyxel pour soutenir sa maintenance continue et son développement de fonctionnalités. Comme avantage, les sponsors peuvent consulter directement le développeur Pyxel. Pour plus de détails, veuillez visiter cette page.