[ English | 中文 | Deutsch | Español | Français | Italiano | 日本語 | 한국어 | Português | Русский | Türkçe | Українська ]
Pyxel es un motor de videojuegos para Python.
Gracias a sus características simples inspiradas en las consolas de juegos retro, como el solo mostrar 16 colores y el reproducir 4 sonidos al mismo tiempo, puedes sentirte libre de disfrutar creando juegos en estilo pixel art.
La motivación para el desarrollo de Pyxel es el feedback de los usuarios. Por favor, ¡dale una estrella a Pyxel en GitHub!
Las especificaciones y API de Pyxel se inspiran en PICO-8 y TIC-80.
Pyxel es de código abierto bajo la licencia MIT y de uso gratuito. ¡Empecemos haciendo un juego retro con Pyxel!
- Funciona en Windows, Mac, Linux y Web
- Programación en Python
- Paleta de 16 colores
- 3 bancos de imágenes de 256x256 píxeles
- 8 mapas de baldosas de 256x256 píxeles
- 4 canales con 64 sonidos definibles
- 8 pistas de música que pueden combinar cualquier sonido
- Entradas de teclado, ratón y gamepad
- Editor de imágenes y sonidos
- Expansión de colores, canales y bancos por el usuario
Después de instalar Python3 (versión 3.8 o superior), ejecute el siguiente comando:
pip install -U pyxel
Si instalas Python con el instalador oficial, marca la casilla Add Python 3.x to PATH
para activar el comando pyxel
.
Después de instalar Homebrew, ejecute los siguientes comandos:
brew install pipx
pipx ensurepath
pipx install pyxel
Para actualizar la versión después de instalar Pyxel, ejecute pipx upgrade pyxel
.
Después de instalar los paquetes SDL2 (libsdl2-dev
para Ubuntu), Python3 (versión 3.8 or superior), y python3-pip
, ejecute el siguiente comando:
sudo pip3 install -U pyxel
Si lo anterior no funciona, intente la autoconstrucción según las instrucciones de Makefile.
La versión web de Pyxel no requiere la instalación de Python ni de Pyxel y funciona tanto en PC como en smartphones y tabletas con navegadores web compatibles.
Para obtener instrucciones específicas, consulte esta página.
Después de instalar Pyxel, los ejemplos de Pyxel se copiarán a la carpeta actual con el siguiente comando:
pyxel copy_examples
Los ejemplos serán copiados de la siguiente manera:
01_hello_pyxel.py | Aplicación simple | Demo | Code |
02_jump_game.py | Juego de plataformas con los archivos de recursos Pyxel | Demo | Code |
03_draw_api.py | Demostración de la API para dibujar | Demo | Code |
04_sound_api.py | Demostración de la API de sonidos | Demo | Code |
05_color_palette.py | Lista de la paleta de colores | Demo | Code |
06_click_game.py | Juego con clics del ratón | Demo | Code |
07_snake.py | Juego de serpiente con música de fondo | Demo | Code |
08_triangle_api.py | Demostración de dibujo de triángulos con la API | Demo | Code |
09_shooter.py | Juego de nave espacial con transiciones de pantalla | Demo | Code |
10_platformer.py | Juego con desplazamiento lateral con plataformas con mapa | Demo | Code |
11_offscreen.py | Rendimiento fuera de la pantalla con la clase Image | Demo | Code |
12_perlin_noise.py | Animación del ruido Perlin | Demo | Code |
13_bitmap_font.py | Dibujar una fuente bitmap | Demo | Code |
14_synthesizer.py | Sintetizador con funciones de expansión de audio | Demo | Code |
15_tiled_map_file.py | Cargar y dibujar un archivo Tile Map (.tmx) | Demo | Code |
16_transform.py | Rotación y escalado de imágenes | Demo | Code |
99_flip_animation.py | Animación con función flip (sólo plataformas no web) | Demo | Code |
30sec_of_daylight.pyxapp | El primer ganador del Jam de Pyxel, por Adam | Demo | Code |
megaball.pyxapp | Juego arcade de física de bolas, por Adam | Demo | Code |
8bit-bgm-gen.pyxapp | Generador de música de fondo hecho por frenchbread | Demo | Code |
Los ejemplos se pueden ejecutar con el siguiente comando:
cd pyxel_examples
pyxel run 01_hello_pyxel.py
pyxel play 30sec_of_daylight.pyxapp
Tras importar el módulo Pyxel en el código de Python, especifique la dimensión de la ventana con la función init
, luego, inicie la aplicación con la función 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)
Los argumentos de la función run
son la función update
para actualizar cada fotograma y la función draw
para dibujar la pantalla cuando sea necesario.
En una aplicación, es recomendable envolver el código de pyxel en una clase como la siguiente:
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()
Cuando se crean gráficos simples sin animación, se puede utilizar la función show
para hacer el código más conciso.
import pyxel
pyxel.init(120, 120)
pyxel.cls(1)
pyxel.circb(60, 60, 40, 7)
pyxel.show()
Un script Python creado puede ejecutarse utilizando el comando python
:
python PYTHON_SCRIPT_FILE
También puede ejecutarse con el comando pyxel run
:
pyxel run PYTHON_SCRIPT_FILE
Además, el comando pyxel watch
permite monitorizar los cambios en un directorio especificado, reejecutando automáticamente el programa cuando se detectan cambios:
pyxel watch WATCH_DIR PYTHON_SCRIPT_FILE
La monitorización de directorios puede detenerse pulsando Ctrl(Command)+C
.
Los siguientes controles especiales se pueden utilizar en cualquier aplicación que esté corriendo:
Esc
Salir de la aplicaciónAlt(Option)+1
Guardar la captura de pantalla al escritorioAlt(Option)+2
Restablecer el momento de inicio de la grabación del vídeo de captura de pantallaAlt(Option)+3
Guarda la captura de video en el escritorio (hasta 10 segundos)Alt(Option)+9
Cambia entre los modos de pantalla (Crisp/Smooth/Retro)Alt(Option)+0
Activa el monitor de monitorización (fps, el tiempo que tarda en actualizar la pantalla y el tiempo que tarda en dibujar)Alt(Option)+Enter
Activar el modo de pantalla completaShift+Alt(Option)+1/2/3
Guardar el banco de imágenes correspondiente en el escritorioShift+Alt(Option)+0
Guardar la paleta de colores actual en el escritorio
El Editor de Pyxel crea imágenes y sonidos que se utilizan en la aplicación de Pyxel.
Se ejecuta con el siguiente comando:
pyxel edit PYXEL_RESOURCE_FILE
Si el archivo de recursos de Pyxel existe, el archivo se carga y si no existe, se crea con el nombre especificado. Si el archivo de recursos es omitido, el nombre de este será my_resource.pyxres
.
Tras iniciar el Editor de Pyxel, el archivo puede ser cambiado arrastrando y soltando otro archivo de recursos.
Dicho archivo de recursos podrá see cargado con la función load
.
EL Editor de Pyxel tiene los siguientes modos de edición:
Editor de imágenes
El modo para editar el banco de imágenes.
Arrastre y suelte un archivo de imagen (PNG/GIF/JPEG) en el Editor de imágenes para cargar la imagen en el banco de imágenes actualmente seleccionado.
Editor de mapa / losas
El modo para editar el mapa de losas o mapa en el que las imágenes en el banco de imágenes están organizados en un patrón de azulejos o baldosas.
Arrastre y suelte un archivo TMX (Tiled Map File) en el Editor de mapas en mosaico para cargar su capa en el orden de dibujo que corresponde al número de mapa en mosaico seleccionado actualmente.
Editor de sonido
El modo para editar el sonido.
Editor de música
El modo para editar música en el que organiza los sonidos del editor de sonidos para poder reproducirlos.
Las imágenes de Pyxel y el mapa también se pueden crear de las siguientes maneras:
- Crea una imagen de una lista de strings con la función
Image.set
o la funciónTilemap.set
- Carga un archivo de imagen (PNG/GIF/JPEG) en la paleta de Pyxel con la función
Image.load
Los sonidos de Pyxel también se pueden crear ude la siguiente manera:
- Crear el sonido desde strings con las funciones
Sounds.set
oMusic.set
Por favor, consulte la API para el uso de estas funciones.
Pyxel soporta un archivo dedicado para distribuir el código (formato de aplicación de Pyxel) que funciona en todas las plataformas.
Crea el archivo de la aplicación Pyxel (.pyxapp) con el comando pyxel package
:
pyxel package APP_DIR STARTUP_SCRIPT_FILE
Si la aplicación debe incluir recursos o módulos adicionales, colóquelos en el directorio de la aplicación.
Los metadatos pueden mostrarse en tiempo de ejecución especificándolos en el siguiente formato dentro del script de inicio. Se pueden omitir los campos que no sean title
y author
.
# title: Pyxel Platformer
# author: Takashi Kitao
# desc: A Pyxel platformer example
# site: https://github.com/kitao/pyxel
# license: MIT
# version: 1.0
El fichero de aplicación creado puede ejecutarse con el comando pyxel play
:
pyxel play PYXEL_APP_FILE
El archivo de aplicación de Pyxel también se puede convertir en un ejecutable o en un archivo HTML con los comandos pyxel app2exe
o pyxel app2html
.
-
width
,height
La anchura y la altura de la pantalla -
frame_count
El número de fotogramas que han pasado -
init(width, height, [title], [fps], [quit_key], [display_scale], [capture_scale], [capture_sec])
Inicializa la aplicación de Pyxel con el tamaño (width
,height
). Los siguientes parámetros pueden ser especificados como opciones: el título contitle
, el ratio de fotogramas por segundo confps
, la tecla para salir de la aplicación conquit_key
, la escala de la pantalla condisplay_scale
, la escala de captura de pantalla concapture_scale
y el tiempo máximo para grabar la pantalla concapture_sec
.
por ejemplo:pyxel.init(160, 120, title="My Pyxel App", fps=60, quit_key=pyxel.KEY_NONE, capture_scale=3, capture_sec=0)
-
run(update, draw)
Comienza la aplicación de Pyxel y llama la funciónupdate
para actualizar cada fotograma y la funcióndraw
para dibujar. -
show()
Muestra la pantalla y espera hasta que la teclaEsc
sea pulsada. -
flip()
Refresca la pantalla un fotograma. La aplicación sale cuando se pulsa la teclaEsc
. Esta función no funciona en la versión web. -
quit()
Salir de la aplicación
load(filename, [excl_images], [excl_tilemaps], [excl_sounds], [excl_musics])
Carga el archivo de recursos (.pyxres). Si una opción esTrue
, el recurso no se cargará. Si existe un archivo de paleta (.pyxpal) con el mismo nombre en la misma ubicación que el archivo de recursos, también se cambiará el color de visualización de la paleta. El archivo de paleta es una entrada hexadecimal de los colores de visualización (por ejemplo,1100FF
), separados por nuevas líneas. El archivo de paleta también se puede utilizar para cambiar los colores mostrados en Pyxel Editor.
-
mouse_x
,mouse_y
La posición del cursor -
mouse_wheel
EL valor actual de la rueda del ratón -
btn(key)
DevuelveTrue
sikey
es presionada, si no devuelveFalse
. (Lista de definición de teclas) -
btnp(key, [hold], [repeat])
DevuelveTrue
sikey
es presionada en ese cuadro, si no devuelveFalse
. Cuandohold
yrepeat
son definidos, devuelveTrue
en el intervalo de cuadrorepeat
cuandokey
es sostenida por más cuadros que el valorhold
. -
btnr(key)
DevuelveTrue
si se suelta la teclakey
en ese frame, si no, devuelveFalse
. -
mouse(visible)
Sivisible
esTrue
, muestra el cursor del ratón. Si esFalse
, no lo muestra. Incluso si el cursor no se muestra, su posición se actualiza.
-
colors
Lista de la paleta de colores que se pueden representar. El color del display se especifica con un valor numérico de 24 bits. Utilizacolors.from_list
ycolors.to_list
para directamente asignar y leer una lista de Python. Ejemplo:old_colors = pyxel.colors.to_list(); pyxel.colors.from_list([0x111111, 0x222222, 0x333333]); pyxel.colors[15] = 0x112233
-
images
Lista de los bancos de imágenes (0-2). (Vea la clase Image)
Ejemplo:pyxel.images[0].load(0, 0, "title.png")
-
tilemaps
Lista de los tilemaps (0-7). (Vea la clase Tilemap) -
clip(x, y, w, h)
Establezca el área de dibujo de la pantalla de (x
,y
) a una anchuraw
y a una alturah
. Reinicia el área de dibujo a todo el área de la pantalla conclip()
. -
camera(x, y)
Cambie las coordenadas de la esquina superior izquierda de la pantalla a (x
,y
). Restablezca las coordenadas de la esquina superior izquierda a (0
,0
) concamera()
. -
pal(col1, col2)
Reemplaza el colorcol1
concol2
para dibujarlo. Utilizapal()
para resetear la paleta de colores y volver a la paleta que viene por defecto por defecto con Pyxel. -
dither(alpha)
Aplica dithering (pseudo-transparencia) al dibujar. Establecealpha
en el rango0.0
-1.0
, donde0.0
es transparente y1.0
es opaco. -
cls(col)
Borra la pantalla con el colorcol
. -
pget(x, y)
Obtiene el color del pixel en la posición (x
,y
). -
pset(x, y, col)
Dibuja un pixel del colorcol
en la posición (x
,y
). -
line(x1, y1, x2, y2, col)
Dibuja una línea del colorcol
desde (x1
,y1
) a (x2
,y2
). -
rect(x, y, w, h, col)
Dibuja un rectángulo de anchuraw
, alturah
y colorcol
desde la posición (x
,y
). -
rectb(x, y, w, h, col)
Dibuja el perímetro de un rectángulo de anchuraw
, alturah
y colorcol
desde la posición (x
,y
). -
circ(x, y, r, col)
Dibuja un círculo de radior
y colorcol
en (x
,y
). -
circb(x, y, r, col)
Dibuja una circunferencia de radior
y colorcol
en (x
,y
). -
elli(x, y, w, h, col)
Dibuja una elipse de anchuraw
, alturah
y colorcol
desde (x
,y
). -
ellib(x, y, w, h, col)
Dibuja el contorno de una elipse de anchuraw
, alturah
y colorcol
desde (x
,y
). -
tri(x1, y1, x2, y2, x3, y3, col)
Dibuja un triángulo con los vertices (x1
,y1
), (x2
,y2
), (x3
,y3
) y colorcol
. -
trib(x1, y1, x2, y2, x3, y3, col)
Dibuja el perímetro de un triángulo con los vertices (x1
,y1
), (x2
,y2
), (x3
,y3
) y colorcol
. -
fill(x, y, col)
Dibuja una elipsis de anchuraw
, alturah
y colorcol
desde (x
,y
). -
blt(x, y, img, u, v, w, h, [colkey], [rotate], [scale])
Copia la región de tamaño (w
,h
) desde la posición (u
,v
) del banco de imágenesimg
(0-2) a (x
,y
). Si es negativo el valor para law
y/o lah
, se representará invirtiendo horizontalmente o verticalmente. Sicolkey
se especifica, se tratará ese color como transparente. Si se especificarotate
(en grados),scale
(1.0=100%), o ambos, se aplicará la transformación correspondiente.
bltm(x, y, tm, u, v, w, h, [colkey], [rotate], [scale])
Copie la región de tamaño (w
,h
) de (u
,v
) del mapa de mosaicostm
(0-7) a (x
,y
). Si se establece un valor negativo paraw
y / oh
, se invertirá horizontal y / o verticalmente. Si se especifica "colkey", se trata como un color transparente. Si se especificarotate
(en grados),scale
(1.0=100%), o ambos, se aplicará la transformación correspondiente. El tamaño de un mosaico es de 8x8 píxeles y se almacena en un mapa de mosaicos como una tupla de(tile_x, tile_y)
.
text(x, y, s, col)
Dibuja un strings
del colorcol
en (x
,y
).
-
sounds
Lista de los sonidos (0-63). (Vea la clase Sound)
Ejemplo:pyxel.sounds[0].speed = 60
-
musics
Lista de las músicas (0-7). (Vea la clase Music) -
play(ch, snd, [tick], [loop], [resume])
Reproduce el sonidosnd
(0-63) en el canalch
(0-3). Si elsnd
está en una lista, será reproducido en orden. La posición de inicio de la reproducción se puede especificar mediante untick
(1 tick = 1/120 segundos). SiTrue
se especifica paraloop
, la reproducción se realizará en bucle. Para reanudar el sonido anterior después de finalizar la reproducción, configureresume
enTrue
. -
playm(msc, [tick], [loop])
Reproduce la músicamsc
(0-7). La posición de inicio de la reproducción se puede especificar mediante untick
(1 tick = 1/120 segundos). SiTrue
se especifica paraloop
, la reproducción en bucle tendrá lugar. -
stop([ch])
Para la reproducción del canalch
(0-3).stop()
para detener todos los canales. -
play_pos(ch)
Obtenga la posición de la reproducción de la música de un canalch
(0-3) como la tupla(sound_no, note_no)
, no quiere decir número. DevuelveNone
cuando la música cesa.
-
ceil(x)
Devuelve el menor número entero mayor o igual ax
. -
floor(x)
Devuelve el mayor entero menor o igual ax
. -
sgn(x)
Devuelve1
cuandox
es positivo,0
cuando es0
y-1
cuando es negativo. -
sqrt(x)
Devuelve la raíz cuadrada dex
. -
sin(deg)
Devuelve el seno dedeg
grados. -
cos(deg)
Devuelve el coseno dedeg
grados. -
atan2(y, x)
Devuelve la arctangente dey
/x
en grados. -
rseed(seed)
Establece la semilla del generador de números aleatorios. -
rndi(a, b)
Devuelve un número entero aleatorio mayor o igual quea
y menor o igual queb
. -
rndf(a, b)
Devuelve un decimal aleatorio mayor o igual quea
y menor o igual queb
. -
nseed(seed)
Establece la semilla de ruido Perlin. -
noise(x, [y], [z])
Devuelve el valor del ruido Perlin para las coordenadas especificadas.
-
width
,height
La anchura y la altura de una imagen -
set(x, y, data)
Define la imagen en (x
,y
) por una lista de strings.
Ejemplo:pyxel.images[0].set(10, 10, ["0123", "4567", "89ab", "cdef"])
-
load(x, y, filename)
Carga el archivo con la imagen (PNG/GIF/JPEG) en (x
,y
). -
pget(x, y)
Obtén el color del pyxel en la posición (x
,y
). -
pset(x, y, col)
Dibuja un pixel del colorcol
en las coordenadas (x
,y
).
-
width
,height
La anchura y la altura del mapa -
imgsrc
El banco de imágenes (0-2) que referencia el mapa -
set(x, y, data)
Establece el mapa a (x
,y
) por una lista de strings
Ejemplo:pyxel.tilemap(0).set(0, 0, ["0000 0100 a0b0", "0001 0101 a1b1"])
-
load(x, y, filename, layer)
Cargue la capa en el orden de dibujolayer
(0-) desde el archivo TMX (Tiled Map File) en (x
,y
). -
pget(x, y)
Obtén la celda del mapa de la posición (x
,y
). Una celda es una tupla formada por(tile_x, tile_y)
-
pset(x, y, tile)
Dibuja unatile
en (x
,y
). Una celda es una tupla formada por(tile_x, tile_y)
-
notes
Lista de notas (0-127). Cuanto mayor sea el número, mayor será el pitch (más agudo) y a33
, se convierte en la nota 'A2' (440 Hz). El resto es-1
. -
tones
Lista de tonos (0:Triangular / 1:Cuadrada / 2:Pulsada / 3:Ruido) -
volumes
-
Lista de volúmenes (0-7)
-
effects
Lista de efectos de sonido (0:None / 1:Slide / 2:Vibrato / 3:FadeOut / 4:Half-FadeOut / 5:Quarter-FadeOut) -
speed
La velocidad de reproducción, 1 es la más rápida y al incrementar este número, la velocidad de reproducción disminuye. Cuando vale 120, la longitud de una nota es de 1 segundo. -
set(notes, tones, volumes, effects, speed)
Fija las notas, los tonos, el volumen y los efectos con una string. Si los tonos, el volumen, la longitud de los efectos son más cortos que la nota, se repetirá desde el principio. -
set_notes(notes)
Fija las notas con un string hecho por 'CDEFGAB'+'#-'+'01234' o 'R'. Sensible a las mayúsculas y minúsculas y los espacios en blanco serán ignorados.
Ejemplo:pyxel.sounds[0].set_notes("G2B-2D3R RF3F3F3")
-
set_tones(tones)
Fija las notas con un string hecho con 'TSPN'. Sensible a las mayúsculas y minúsculas y los espacios en blanco serán ignorados.
Ejemplo:pyxel.sounds[0].set_tones("TTSS PPPN")
-
set_volumes(volumes)
Fija el volumen con una string hecha de '01234567'. Sensible a las mayúsculas y minúsculas y los espacios en blanco serán ignorados.
Ejemplo:pyxel.sounds[0].set_volumes("7777 7531")
-
set_effects(effects)
Fija los efectos con una string hecha con 'NSVFHQ'. Sensible a las mayúsculas y minúsculas y los espacios en blanco serán ignorados.
Ejemplo:pyxel.sounds[0].set_effects("NFNF NVVS")
-
seqs
Lista bidimensional de sonidos (0-63) con el número de canales -
set(seq0, seq1, seq2, ...)
Configura las listas de sonido (0-63) de los canales. Si se referencia una lista vacía, ese canal no se utilizará para reproducir el sonido.
Ejemplo:pyxel.musics[0].set([0, 1], [], [3])
Pyxel tiene "API avanzadas" que no se mencionan en esta referencia porque "puede confundir a los usuarios" o "necesita unos conocimientos especializados para poder utilizarlas".
Si estás familiarizado con tus habilidades. ¡Intenta crear proyectos alucinantes con esto como pista!
Usa el Rastreador de problemas para enviar errores y solicitudes de mejora. Antes de presentar un nuevo tema, asegúrese de que no existe uno ya abierto similar.
Cualquier persona que compruebe y prueba manualmente el código y reporte errores o sugerencias para mejorar el código en el Issue Tracker es bienvenida!
Parches o errores son aceptables en forma de pull request (PRs). Asegurate de que el tema de la pull request esté abierta en el Issue Tracker.
La solicitud de extracción enviada se considera como un acuerdo para publicar bajo la Licencia MIT.
Pyxel está bajo la Licencia MIT. Se puede reutilizar dentro de software propietario, siempre que todas las copias del software o de partes sustanciales incluyan una copia de los términos de la Licencia MIT y también un aviso de derechos de autor.
Pyxel está buscando patrocinadores en GitHub Sponsors. Considere patrocinar Pyxel para un mantenimiento continuo y adiciones de funciones. Los patrocinadores pueden consultar sobre Pyxel como un beneficio. Consulte aquí para obtener más detalles.