[ English | 中文 | Español | Italiano | 日本語 | 한국어 | Português | Русский ]
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.
![](/lidiapopescu/pyxel/raw/master/pyxel/examples/screenshots/01_hello_pyxel.gif)
![](/lidiapopescu/pyxel/raw/master/pyxel/examples/screenshots/02_jump_game.gif)
![](/lidiapopescu/pyxel/raw/master/pyxel/examples/screenshots/03_draw_api.gif)
![](/lidiapopescu/pyxel/raw/master/pyxel/examples/screenshots/04_sound_api.gif)
![](/lidiapopescu/pyxel/raw/master/pyxel/editor/screenshots/image_tilemap_editor.gif)
![](/lidiapopescu/pyxel/raw/master/pyxel/editor/screenshots/sound_music_editor.gif)
Las características de la consola de juego y APIs de Pyxel son referencia de los increíbles PICO-8 y TIC-80.
Pyxel es de código abierto y de libre uso. Comencemos a crear juegos retro con Pyxel!
- Se ejecuta en Windows, Mac y Linux
- código con Python3
- Paleta fija de 16 colores
- 3 bancos de imágenes de tamaño 256x256
- 8 tilemaps de tamaño 256x256
- 4 canales con 64 sonidos configurables
- 8 canciones que pueden combinar sonidos arbitrarios
- Entradas de teclado, mouse, y gamepad
- Editor de imagen y sonido
Primero, instalar Python3 (versión 3.6.8 o superior).
Cuando instale Python con el instalador oficial, añada Python al PATH marcando el botón de abajo:
A continuación, instale Pyxel con el siguiente comando pip
desde la línea de comandos:
pip install -U pyxel
Primero, en el entorno donde está instalado el administrador de paquetes Homebrew, instale Python3 (versión 3.6.8 o superior) y el paquetes requeridos con el siguiente comando:
brew install python3 gcc sdl2 sdl2_image gifsicle
Puedes instalar Python3 de otras maneras, pero ten en cuenta que debes instalar otras bibliotecas.
Luego, reinicie el terminal e instale Pyxel con el comando pip3
:
pip3 install -U pyxel
Instala Python3 (versión 3.6.8 o superior) y los paquetes requeridos en la forma apropiada para cada distribución.
Ubuntu:
sudo apt install python3 python3-pip libsdl2-dev libsdl2-image-dev gifsicle
sudo pip3 install -U pyxel
Para instalar Pyxel en un entorno diferente a los anteriores (Linux 32-bit, Raspberry PI, etc.), sigue los pasos siguientes para montarlos:
- C++ build toolchain (debe incluir los comandos
gcc
ymake
) - libsdl2-dev y libsdl2-image-dev
- Python3 (versión 3.6.8 o superior) y el comando
pip
git clone https://github.com/kitao/pyxel.git
cd pyxel
make -C pyxel/core clean all
pip3 install .
Después de instalar Pyxel, los ejemplos serán copiados al directorio actual con el siguiente comando:
install_pyxel_examples
Los ejemplos a ser copiados son los siguientes:
- 01_hello_pyxel.py - Aplicación simple
- 02_jump_game.py - Juego de plataformas con los archivos de recursos Pyxel
- 03_draw_api.py - Demonstración de la API de dibujado
- 04_sound_api.py - Demonstración de la API de sonido
- 05_color_palette.py - Lista de paleta de colores
- 06_click_game.py - Juego de click con el mouse
- 07_snake.py - Juego de serpiente con música de fondo
- 08_triangle_api.py - Demostración de la API dibujando triangulos
- 09_shooter.py - Shoot'em up juego con transición de pantalla
Los ejemplos pueden ser ejecutados como código Python:
Windows:
cd pyxel_examples
python 01_hello_pyxel.py
Mac / Linux:
cd pyxel_examples
python3 01_hello_pyxel.py
Luego de importar el módulo Pyxel en tu código Python, primero especifíca el tamaño de la pantalla con la función init
, luego inicia la aplicación Pyxel 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 cuadro, y la función draw
para dibujar la escena cuando es necesario.
En la aplicación actual, es recomendable envolver el código Pyxel dentro de una clase como a continuación:
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()
También se puede escribir código simple utilizando las funciones show
y flip
para dibujar gráficos y animaciones simples.
La función show
muestra la pantalla y espera hasta que la tecla ESC
es pulsada.
import pyxel
pyxel.init(120, 120)
pyxel.cls(1)
pyxel.circb(60, 60, 40, 7)
pyxel.show()
La función flip
actualiza la pantalla una vez.
import pyxel
pyxel.init(120, 80)
while True:
pyxel.cls(3)
pyxel.rectb(pyxel.frame_count % 160 - 40, 20, 40, 40, 7)
pyxel.flip()
Los siguientes controles especiales pueden ser usados cuando una aplicación Pyxel se esta ejecutando:
Esc
Sale de la aplicaciónAlt(Option)+1
Guarda la captura de pantalla en el escritorioAlt(Option)+2
Reinicia el tiempo de grabación de la captura de video de pantalla al inicialAlt(Option)+3
Guarda la captura de video de pantalla (gif) en el escritorio (máximo 30 segundos)Alt(Option)+0
Intercambia el monitor de rendimiento (fps, tiempo de actualización, y tiempo de dibujado)Alt(Option)+Enter
Intercambia la pantalla completa
La aplicacion "Pyxel Editor" viene adjunta, puede crear imágenes y sonidos usados dentro de Pyxel.
Pyxel Editor se inicia con el siguiente comando:
pyxeleditor [pyxel_resource_file]
Si el archivo de recurso Pyxel especificado (.pyxres) existe, el archivo es cargado, sino existe, un nuevo archivo es creado con el nombre especificado.
Si el archivo de recurso es omitido, el nombre es my_resource.pyxres
.
Luego de iniciar el Pyxel Editor, el archivo puede ser cambiado arrastrando y soltando otro archivo de recurso. Si el archivo de recurso es arrastrado y soltado mientras se sostiene la tecla Ctrl
(Cmd
), solo el tipo de recurso (imagen/tilemap/sonido/musica) que esta siendo editado será cargado. Esta operación permite combinar multiples archivos de recursos en uno.
El archivo de recurso creado puede ser cargado con la función load
.
Pyxel Editor tiene las siguientes modalidades de edición.
Editor de Imágenes:
El modulo para editar el banco de imágenes.
Arrastrando y soltando un archivo png en la pantalla del Editor de Imágenes, la imagen puede ser cargada en el banco de imágenes seleccionado.
Editor de Tilemap:
El modulo para editar tilemaps en el que las imágenes del banco de imágenes son organizadas en un patrón de tiles.
Editor de Sonido:
El modulo para editar sonidos.
Editor de Música:
El modulo para editar música en la que los sonidos son organizados en orden de reproducción.
La imágenes y tilemaps de Pyxel también pueden ser creadas de la siguiente forma:
- Crea una imagen desde una lista de cadena de texto con la función
Image.set
oTilemap.set
- Carga un archivo png en la paleta de Pyxel con la función
Image.load
Los sonidos en Pyxel también pueden ser creados de la siguiente forma:
- Crear un sonido desde cadenas de texto con la función
Sound.set
oMusic.set
Favor acudir a la referencia del API para el uso de estas funciones.
Mediante el uso del Pyxel Packager adjunto, se puede crear un ejecutable independiente que funcione incluso en ambientes donde Python no este instalado.
Para crear un ejecutable autónomo, en el entorno en el que está instalado PyInstaller, especifique el archivo Python que se utilizará para lanzar la aplicación con el comando pyxelpackager
de la siguiente manera:
pyxelpackager python_file
Cuando el proceso termine, el ejecutable independiente se encontrará en la carpeta dist
.
Si también son necesarios recursos como archivos .pyxres y .png, ponlos dentro de la carpeta assets
para que sean incluidos.
También es posible especificar un ícono con la opción -i icon_file
.
-
width
,height
El ancho y alto de la pantalla -
frame_count
El número de cuadros transcurridos -
init(width, height, [caption], [scale], [palette], [fps], [quit_key], [fullscreen])
Inicializar la aplicación Pyxel con el tamaño de pantalla (width
,height
). El ancho y alto máximo de la pantalla es 256
También es posible especificar el título de la ventana concaption
, el aumento de pantalla conscale
, la paleta de colores conpalette
, los cuadros por segundo confps
, la tecla para salir de la aplicación conquit_key
, y si se iniciará en modo de pantalla completa confullscreen
.palette
es especificada como una lista de 16 elementos de color a 24 bits
p.ej.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)
Inicia la aplicación Pyxel y llama a la funciónupdate
para la actualización de cuadros y la funcióndraw
para el dibujado -
quit()
Sale de la aplicación Pyxel al final del cuadro actual -
flip()
Fuerza el dibujado en la pantalla (no usarlo en aplicaciones normales) -
show()
Dibuja la pantalla y espera indefinidamente (no usarlo en aplicaciones normales)
-
save(filename)
Guarda el archivo de recurso (.pyxres) en el directorio donde se ejecuta el script -
load(filename, [image], [tilemap], [sound], [music])
Lee el archivo de recurso (.pyxres) desde el directorio donde se ejecuta el script. Si el tipo de recurso (image/tilemap/sound/music) se configura comoFalse
, el recurso no será cargado.
-
mouse_x
,mouse_y
La posición actual del puntero del mouse -
mouse_wheel
El valor actual del mouse wheel -
btn(key)
DevuelveTrue
sikey
es presionada, sino devuelveFalse
(lista de definición de teclas) -
btnp(key, [hold], [period])
DevuelveTrue
sikey
es presionada en ese cuadro, sino devuelveFalse
. Cuandohold
yperiod
son definidos,True
es devuelto en el intervalo de cuadroperiod
cuando lakey
es sostenida por mas cuadros que el valorhold
-
btnr(key)
DevuelveTrue
sikey
es liberada en ese cuadro, sino devuelveFalse
-
mouse(visible)
Sivisible
esTrue
, muestra el puntero del mouse. Si esFalse
, lo esconde. Incluso si el puntero del mouse no es mostrado, su posición si es actualizada.
-
image(img, [system])
Opera el banco de imágenesimg
(0-2) (referirse a la clase Image). Sisystem
esTrue
, el banco de imágenes del sistema puede ser accedido. 3 es para el editor de recurso y fuente. 4 es para la pantalla de visualización
p.ej.pyxel.image(0).load(0, 0, "title.png")
-
tilemap(tm)
Opera el tilemaptm
(0-7) (referirse a la clase Tilemap) -
clip(x, y, w, h)
Prepara el área de dibujado de la pantalla en (x
,y
) para el anchow
y altoh
. Reinicia el área de dibujado para pantalla completa conclip()
-
pal(col1, col2)
Remplaza el colorcol1
concol2
en el dibujado.pal()
para reiniciar a la paleta inicial -
cls(col)
Limpia la pantalla con el colorcol
-
pget(x, y)
Obtiene el color del pixel en (x
,y
) -
pset(x, y, col)
Dibuja un pixel de colorcol
en (x
,y
) -
line(x1, y1, x2, y2, col)
Dibuja una línea de colorcol
desde (x1
,y1
) hasta (x2
,y2
) -
rect(x, y, w, h, col)
Dibuja un rectángulo de anchow
, altoh
y colorcol
en (x
,y
) -
rectb(x, y, w, h, col)
Dibuja el contorno de un rectángulo de anchow
, altoh
y colorcol
en (x
,y
) -
circ(x, y, r, col)
Dibuja un círculo de radior
y colorcol
en (x
,y
) -
circb(x, y, r, col)
Dibuja el contorno de un círculo de radior
y colorcol
en (x
,y
) -
tri(x1, y1, x2, y2, x3, y3, col)
Dibuja un triangulo con los vértices (x1
,y1
), (x2
,y2
), (x3
,y3
) y colorcol
-
trib(x1, y1, x2, y2, x3, y3, col)
Dibuja el controno de un triangulo con los vértices (x1
,y1
), (x2
,y2
), (x3
,y3
) y colorcol
-
blt(x, y, img, u, v, w, h, [colkey])
Copia la región de tamaño (w
,h
) de (u
,v
) del banco de imágenesimg
(0-2) en (x
,y
). Si se establece un valor negativo paraw
y/oh
, será invertido horizontal y/o verticalmente. Sicolkey
es especificado, ese color se trata como transparencia
bltm(x, y, tm, u, v, w, h, [colkey])
Dibuja el tilemaptm
(0-7) en (x
,y
) de acuerdo a la información del tile de tamaño (w
,h
) de (u
,v
). Sicolkey
es definido, ese color se trata como transparencia. Un tile del tilemap es dibujado con un tamaño de 8x8, y si el número de tile es 0, apunta a la región (0, 0)-(7, 7) del banco de imágenes, si es 1, apunta a (8, 0)-(15, 0)
text(x, y, s, col)
Dibuja una cadena de textos
de colorcol
en (x
,y
)
-
sound(snd, [system])
Opera el sonidosnd
(0-63) (referirse a la clase Sound). Sisystem
esTrue
, el sonido 64 del sistema puede ser accedido
p.ej.pyxel.sound(0).speed = 60
-
music(msc)
Opera la músicamsc
(0-7) (referirse a la clase Music) -
play_pos(ch)
Obtiene la posición de reproducción de sonido del canalch
. Los cienes y miles indican el número de sonido y los unos y dieces inican el número de nota. Cuando la reproducción es detenida, retorna-1
-
play(ch, snd, loop=False)
Toca el sonidosnd
(0-63) en el canalch
(0-3). Los toca en orden cuandosnd
es una lista -
playm(msc, loop=False)
Toca la músicamsc
(0-7) -
stop([ch])
Detiene la reproducción de todos los canales. Sich
(0-3) es definido, detiene únicamente el canal correspondiente
-
width
,height
El ancho y alto de la imagen -
data
La data de la imagen (256x256 lista bidimensional) -
get(x, y)
Obtiene la data de la imagen en (x
,y
) -
set(x, y, data)
Establece la data de la imagen en (x
,y
) por un valor o una lista de cadenas de texto
p.ej.pyxel.image(0).set(10, 10, ["1234", "5678", "9abc", "defg"])
-
load(x, y, filename)
Lee la imagen png desde el directorio de ejecución del script en (x
,y
) -
copy(x, y, img, u, v, w, h)
Copia la región de tamaño (w
,h
) desde (u
,v
) del banco de imágenesimg
(0-2) en (x
,y
)
-
width
,height
El ancho y alto del tilemap -
data
La data del tilemap (256x256 lista bidimensional) -
refimg
El banco de imágenes referenciado por el tilemap -
get(x, y)
Obtiene la data del tilemap en (x
,y
) -
set(x, y, data)
Establece la data del tilemap en (x
,y
) por un valor o una lista de cadenas de texto.
p.ej.pyxel.tilemap(0).set(0, 0, ["000102", "202122", "a0a1a2", "b0b1b2"])
-
copy(x, y, tm, u, v, w, h)
Copia la región de tamaño (w
,h
) desde (u
,v
) del tilemaptm
(0-7) en (x
,y
)
-
note
Lista de notas (0-127) (33 = 'A2' = 440Hz) -
tone
Lista de tonos (0:Triangulo / 1:Cuadrado / 2:Pulso / 3:Ruido) -
volume
Lista de volumen (0-7) -
effect
Lista de efectos (0:Ninguno / 1:Deslisante / 2:Vibración / 3:Desvanecimiento) -
speed
La longitud de una nota (120 = 1 segundo por tono) -
set(note, tone, volume, effect, speed)
Establece una nota, tono, volumen, y efecto con una cadena de texto. Si la longitud del tono, volumen, y efecto son mas cortos que la nota, se repite desde el principio -
set_note(note)
Establece la nota con una cadena hecha con 'CDEFGAB'+'#-'+'0123' o 'R'. No diferencia mayúsculas/minúsculas y los espacios en blanco son ignorados
p.ej.pyxel.sound(0).set_note("G2B-2D3R RF3F3F3")
-
set_tone(tone)
Establece el tono con una cadena de texto hecha con 'TSPN'. No diferencia mayúsculas/minúsculas y los espacios en blanco son ignorados
p.ej.pyxel.sound(0).set_tone("TTSS PPPN")
-
set_volume(volume)
Establece el volumen con una cadena de texto hecha con '01234567'. No diferencia mayúsculas/minúsculas y los espacios en blanco son ignorados
p.ej.pyxel.sound(0).set_volume("7777 7531")
-
set_effect(effect)
Establece el efecto con una cadena de texto hecha con 'NSVF'. No diferencia mayúsculas/minúsculas y los espacios en blanco son ignorados
p.ej.pyxel.sound(0).set_effect("NFNF NVVS")
-
ch0
Lista de sonidos (0-63) tocada en el canal 0. Si se define una lista vacía, el canal no es usado para reproducción -
ch1
Lista de sonidos (0-63) tocada en el canal 1. Si se define una lista vacía, el canal no es usado para reproducción -
ch2
Lista de sonidos (0-63) tocada en el canal 2. Si se define una lista vacía, el canal no es usado para reproducción -
ch3
Lista de sonidos (0-63) tocada en el canal 3. Si se define una lista vacía, el canal no es usado para reproducción -
set(ch0, ch1, ch2, ch3)
Define la lista de sonidos (0-63) de todos los canales. Si se define una lista vacía, ese canal no es usado para reproducción
p.ej.pyxel.music(0).set([0, 1], [2, 3], [4], [])
-
set_ch0(data)
Define la lista de sonidos (0-63) del canal 0 -
set_ch1(data)
Define la lista de sonidos (0-63) del canal 1 -
set_ch2(data)
Define la lista de sonidos (0-63) del canal 2 -
set_ch3(data)
Define la lista de sonidos (0-63) del canal 3
Usar el issue tracker para enviar reportes de bugs y solicitud de características/mejoras. Antes de enviar un nuevo issue, buscar en el issue tracker para asegurarse que no existe un issue similar abierto.
Cuando se envíe un reporte, seleccionar la plantilla apropiada de este enlace.
Cualquiera puede hacer test manuales del código y enviar reporte de bugs o sugerencias para mejoras en el issue tracker, serán bien recibidos!
Parches/correcciones son aceptados en forma de pull requests (PRs). Asegurarse que el issue del pull request que apunta este abierto en el issue tracker.
Los pull request enviados se consideran acordados publicarse bajo licencia MIT.
Pyxel esta bajo licencia MIT. Puede ser reutilizado dentro de software propietario proporcionando a todas las copias del software licenciado que incluyan una copia de la licencia MIT, términos y aviso de derechos de autor.
Pyxel utiliza el siguiente software: