Tabla de Contenidos
Pyxel
Biblioteca de Python para desarrollar juegos retro.
Inspirado en consolas retro, aplica varias restricciones como una paleta de 16 colores y 4 canales de audio.
Características
- Multiplataforma (Windows, Mac, Linux y web)
- Programable con Python (aunque está hecho en Rust)
- Paleta de 16 colores
- 3 bancos de imágenes de 256×256
- 8 tilemaps de 256×256
- 4 canales con 64 sonidos diferentes
- 8 pistas de música combinando cualquier sonido
- Compatible con teclado, ratón y mando
- Herramientas para la edición de imágenes y sonidos
- Bancos, canales y colores extensibles por el usuario
Instalación
En Linux, sería de la siguiente manera:
sudo pip3 install -U pyxel
Necesario el paquete SDL2 (libsdl2-dev en Ubuntu), Python3 (version 3.8 o superior), y python3-pip
En Arch Linux, está disponible mediante el paquete python-pyxel, en AUR.
Hola, mundo
Ejemplo más sencillo que muestra un texto por pantalla:
import pyxel class App: def __init__(self): pyxel.init(160,120,title="Hello, world") pyxel.run(self.update, self.draw) def update(self): # Se ejecutará 60 veces por segundo (FPS) if pyxel.btnp(pyxel.KEY_Q): pyxel.quit() def draw(self): pyxel.cls(0) pyxel.text(55, 41, "Hello, world!", 5) App()
Si guardamos el fichero como main.py, lo podríamos ejecutar con:
pyxel run main.py
pyxel.init
Esta función inicializa el motor de Pyxel y genera la ventana.
pyxel.init(160,120,title="Hello, world")
La anterior instrucción crea una ventana de 160 x 120 pixeles con el título Hello, world.
Firma de la función:
init(width, height, [title], [fps], [quit_key], [display_scale], [capture_scale], [capture_sec])
width: anchura de la pantalla.height: altura de la pantalla.title: título de la ventana.fps: frames por segundo.quit_key: tecla para cerrar la aplicación.display_scale:capture_scalecapture_sec: duración máxima (segundos) de la captura de vídeo.
pyxel.run
Esta función inicia la aplicación Pyxel. Necesita recibir por parámetro 2 funciones:
update: actualiza los valores del juego (controles, física, etc) en cada frame.draw: dibuja elementos en pantalla
pyxel.run(self.update, self.draw)
Por defecto, la función update se ejecuta 30 veces por segundo.
API
Todas las funciones disponibles de la API de Pyxel se pueden consultar en:
Ejecutar una aplicación
Al tratarse de scripts en Python, los juegos hechos con Pyxel se pueden lanzar de la siguiente manera:
python mijuego.py
También puede ejecutarse con el comando pyxel run:
pyxel run mijuego.py
Si queremos que Pyxel esté pendiente de los cambios en un directorio y relance el programa cuando esto suceda:
pyxel watch <DIRECTORIO_CON_APLICACION_PYXEL>
Controles durante la ejecución de la aplicación
| Tecla | Descripción |
|---|---|
| Esc | Cierra la aplicación |
| Alt + 1 | Guarda una captura de pantalla en el escritorio |
| Alt + 2 | Reinicia el tiempo de inicio de grabación de una captura de vídeo |
| Alt + 3 | Guarda una captura de vídeo en el escritorio (de 10 segundos) |
| Alt + 8 | Alterna el escalado de pantalla |
| Alt + 9 | Cambia entre modos de pantalla (Crisp/Smooth/Retro) |
| Alt + 0 | Alterna el monitor de rendimiento (fps/update time/draw time) |
| Alt + Enter | Alterna pantalla completa |
| Shift + Alt + 1 | Guarda el banco de imágenes 0 al escritorio |
| Shift + Alt + 2 | Guarda el banco de imágenes 1 al escritorio |
| Shift + Alt + 3 | Guarda el banco de imágenes 2 al escritorio |
| Shift + Alt + 0 | Guarda la paleta de colores actual en el escritorio |
Distribuir una aplicación
Paquete Pyxel (pyxapp)
Pyxel dispone de un formato propio de distribución multiplataforma. Se crea de la siguiente manera:
pyxel package <DIRECTORIO_APLICACION_PYXEL> <FICHERO_PRINCIPAL>
Tanto los ficheros con el código como los recursos estarán contenidos en un único fichero.
El paquete creado se puede ejecutar con:
pyxel play <fichero.pyxapp>
Ejecutable Windows
pyxel app2exe <fichero.pyxapp>
Utiliza PyInstaller para crear el ejecutable
Fichero HTML
pyxel app2html <fichero.pyxapp>
El fichero .html resultante podremos abrirlo con cualquier navegador y el juego se ejecutará en él.
Pyxel utiliza Pyodide para que código Python se pueda ejecutar en un navegador
Pyxel Editor: editor de recursos
Pyxel incluye un editor visual desde el que podremos crear recursos:
- Imágenes (sprites)
- Tilemap (mapas)
- Efectos de sonido
- Música
Para abrir este editor:
pyxel edit <fichero.pyxres>
Si no indicamos ningún nombre de fichero, se creará uno con el nombre my_resource.pyxres.
Editor de imágenes
El editor tiene 3 bancos de imágenes (0, 1, 2) con lo que podremos guardar hasta 3 imágenes de 256×256.
También se puede arrastrar una imagen (PNG, GIF o JPEG) y se mostrará en un banco de imágenes del editor.
Editor de mapas
El editor de tilemaps nos permite hacer mosaicos que luego se utilizarán para crear mapas en el juego.
Podemos hacer mapas a partir de los elementos que hay en los bancos de imágenes.
Podemos tener hasta 7 mapas usando los 3 bancos de imágenes.
Editor de sonidos
Permite generar hasta 64 sonidos diferentes.
Los sonidos son MIDI y se pueden añadir efectos sobre los sonidos.
Colores
Por defecto, Pyxel soporta 16 colores que están representados por números enteros (del 0 al 15), pero también se pueden usar constantes definidas en este fichero: https://github.com/kitao/pyxel/blob/main/python/pyxel/__init__.pyi
Por ejemplo:
| Color | Número | Uso con Pyxel |
|---|---|---|
| Negro | 0 | pyxel.COLOR_BLACK |
| Blanco | 7 | pyxel.COLOR_WHITE |
Teclas
Se pueden consultar la definición de las teclas, entre otras cosas, en este fichero: https://github.com/kitao/pyxel/blob/main/python/pyxel/__init__.pyi
Por ejemplo:
| Tecla | Uso con Pyxel |
|---|---|
| Alt | KEY_A |
| Q | KEY_Q |
| → | KEY_RIGHT |
| ← | KEY_LEFT |
Controles / entrada
Desde Pyxel también se puede usar el ratón y mandos (hasta 4 mandos).
Se pueden consultar la definición de las teclas, entre otras cosas, en este fichero: https://github.com/kitao/pyxel/blob/main/python/pyxel/__init__.pyi
Por ejemplo:
| Tecla | Uso con Pyxel |
|---|---|
| Botón derecho del ratón | pyxel.MOUSE_BUTTON_RIGHT |
| Botón izquierdo del ratón | pyxel.MOUSE_BUTTON_LEFT |
| Botón A del primer mando | pyxel.GAMEPAD1_BUTTON_A |
| Arriba en el mando 2 | pyxel.GAMEPAD2_BUTTON_DPAD_UP |
Juegos de ejemplo
En el repositorio de Pyxel hay varios scripts con ejemplos de juegos que se pueden hacer con esta biblioteca:
Se recomienda seguir el siguiente orden para aprender Pyxel: 01, 05, 03, 04, 02.
Otros ejemplos en esta wiki:
Recursos
- Python Retro Game Tutorial (vídeo)
- Taller de Pyxel | Gamejam (vídeo)
- ¡Crea fácilmente juegos retro con Pyxel! ¡Incluso los principiantes pueden hacer juegos en Python! (vídeo, audio en japonés, pero hay subtítulos en español)
