[ English | 中文 | Deutsch | Español | Français | 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.
Las especificaciones y API de Pyxel se inspiran en PICO-8 y TIC-80.
Pyxel es de código abierto y gratuito. ¡Empecemos haciendo un juego retro con Pyxel!
- Funciona en Windows, Mac, Linux y Web
- Programación con Python
- Paleta de 16 colores
- 3 bancos de imágenes de 256x256
- 8 mapas de 256x256
- 4 canales con 64 posibles definiciones de sonido
- 8 músicas que pueden combinar sonidos arbitrarios
- Entrada de teclado, ratón y gamepad.
- Editor de imágenes y sonido
Después de instalar Python3 (versión 3.7 o superior), ejecute el siguiente comando:
pip install -U pyxel
Después de instalar Python3 (versión 3.7 o superior), ejecute el siguiente comando:
pip3 install -U pyxel
Después de instalar los paquetes SDL2 (libsdl2-dev
para Ubuntu), Python3 (versión 3.7 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.
Usando el Pyxel Web Launcher o elementos personalizados para HTML, puedes ejecutar Pyxel en un navegador web sin ningún trabajo de instalación.
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
- 02_jump_game.py - Juego de plataformas con los archivos de recursos Pyxel
- 03_draw_api.py - Demostración de la API para dibujar
- 04_sound_api.py - Demostración de la API de sonidos
- 05_color_palette.py - Lista de la paleta de colores
- 06_click_game.py - Juego con clics del ratón
- 07_snake.py - Juego de serpiente con música de fondo
- 08_triangle_api.py - Demostración de dibujo de triángulos con la API
- 09_shooter.py - Juego de nave espacial con transiciones de pantalla
- 10_platformer.py - Juego con desplazamiento lateral con plataformas con mapa
- 11_offscreen.py - Rendimiento fuera de la pantalla con la clase Image
- 12_perlin_noise.py - Animación del ruido Perlin
- 30SecondsOfDaylight.pyxapp - El primer ganador del Jam de Pyxel, por Adam
- megaball.pyxapp - Juego arcade de física de bolas, por Adam
Los ejemplos se pueden ejecutar con el siguiente comando:
cd pyxel_examples
pyxel run 01_hello_pyxel.py
pyxel play 30SecondsOfDaylight.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()
El código generado puede ser ejecutado con el siguiente comando:
pyxel run PYTHON_SCRIPT_FILE
Para la versión empaquetada, se puede ejecutar como un script normal de Python:
cd pyxel_examples
python3 PYTHON_SCRIPT_FILE
(Para Windows, escriba python
en vez de python3
)
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)+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 completa
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. Si el archivo se arrastra y se tiene pulsada la tecla Ctrl(Cmd)
, solo el recurso concreto se cargará (Imagen/Mapa/Sonido/Música) que se está editando actualmente. Esta operación permite combinar multiples archivos de recursos en uno solo.
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.
Arrastrando y soltando un archivo de imagen (png/jpg/gif) en el editor de imágenes, la imagen será cargada en el banco de imágenes 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
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.
Cree la aplicación (.pyxapp) con el siguiente comando:
pyxel package APP_ROOT_DIR STARTUP_SCRIPT_FILE
Si la aplicación debe incluir recursos o algunos módulos adicionales, colóquelo en la carpeta de la aplicación.
La aplicación creada se puede ejecutar con el siguiente comando:
pyxel play PYXEL_APP_FILE
-
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. -
quit()
Salir de la aplicación
load(filename, [image], [tilemap], [sound], [music])
Carga el archivo de recursos (.pyxres). SiFalse
es especificado para los recursos (image/tilemap/sound/music
), los recursos no serán cargados.
-
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:org_colors = pyxel.colors.to_list(); pyxel.colors[15] = 0x112233; pyxel.colors.from_list(org_colors)
-
image(img)
Opera la imagen del banco de imágenesimg
(0-2). (Vea la clase Image)
Ejemplo:pyxel.image(0).load(0, 0, "title.png")
-
tilemap(tm)
Opera el mapatm
(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. -
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])
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.
bltm(x, y, tm, u, v, w, h, [colkey])
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. 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
).
-
sound(snd)
Opera el sonidosnd
(0-63). (Vea la clase Sound)
Ejemplo:pyxel.sound(0).speed = 60
-
music(msc)
Reproduce la músicamsc
(0-7). (Vea la clase Music) -
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. -
play(ch, snd, [tick], [loop])
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. -
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
-
ceil(x)
Devuelve el menor número entero mayor o igual ax
. -
floor(x)
Devuelve el mayor entero menor o igual ax
. -
sgn(x)
Devuelve 1 cuandox
es positivo, 0 cuando es cero 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: int)
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.image(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 -
refimg
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"])
-
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 a 33, 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:Nada / 1:Slide / 2:Vibrato / 3: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'+'#-'+'0123' o 'R'. Sensible a las mayúsculas y minúsculas y los espacios en blanco serán ignorados.
Ejemplo:pyxel.sound(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.sound(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.sound(0).set_volumes("7777 7531")
-
set_effects(effects)
Fija los efectos con una string hecha con 'NSVF'. Sensible a las mayúsculas y minúsculas y los espacios en blanco serán ignorados.
Ejemplo:pyxel.sound(0).set_effects("NFNF NVVS")
-
snds_list
Lista bidimensional de sonidos (0-63) con el número de canales. -
set(snds0, snds1, snds2, snds3)
Fija la lista de sonidos (0-63) de todos los canales. Si se referencia una lista vacía, ese canal no se utilizará para reproducir el sonido.
Ejemplo:pyxel.music(0).set([0, 1], [2, 3], [4], [])
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
Los pull request enviados se consideran acordados para poder publicarse bajo la Licencia MIT.
Pyxel esta bajo la Licencia MIT. Puede ser reutilizada con el software propietario, siempre y cuando todas las copias del software o sus substanciales porciones del mismo incluyan una copia de los términos de la Licencia MIT y también un aviso de copyright.
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.