[ English | Japanese | Português ]
Pyxel é um ambiente de desenvolvimento de jogos retrôs em Python.
Graças às suas especificações simples inspiradas em consoles de jogos retrô, como apenas 16 cores podem ser exibidas e apenas 4 sons podem ser reproduzidos ao mesmo tempo, você pode se sentir à vontade para fazer jogos em estilo pixel art.
As especificações do console, APIs e paletas do Pyxel derivam dos incríveis PICO-8 e TIC-80.
Pyxel é open source e livre para utilização. Vamos fazer jogos retrôs com Pyxel!
- Executável no Windows, Mac e Linux
- Código escrito em Python3
- Paleta fixa de 16 cores
- 4 bancos de imagens de tamanho 256x256
- 4 canais com 64 bancos de som definíveis
- Entrada de teclado, mouse e joystick(WIP)
- Editor de imagem e som (WIP)
Após instalar o Python3, o seguinte comando pip
instala o Pyxel:
pip install pyxel
Após instalar o Python3 e glfw, instale Pyxel com o comando pip
.
Se o gerenciador de pacotes Homebrew estiver instalado, o seguinte comando instala todos os pacotes necessários:
brew install python3 glfw
pip3 install pyxel
Instale os pacotes necessários da maneira apropriada para cada distribuição.
Arch:
pacman -S python python-pip glfw portaudio
pip install pyxel
Debian:
apt-get install python3 python3-pip glfw libportaudio2 libasound-dev
pip3 install pyxel
Depois de instalar o Pyxel, os exemplos serão copiados para o atual diretório com o seguinte comando:
install_pyxel_examples
Depois de importar o módulo Pyxel para o seu código Python, primeiro especifique o tamanho da janela com a função init
, depois inicie a aplicação Pyxel com a função 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)
Os argumentos da função run
são as funções update
, para atualizar cada frame, e draw
para desenhar a tela quando for necessário.
Em um programa de verdade, é recomendado embrulhar o código pyxel em uma classe como feito abaixo:
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, self.x + 7, 7, 9)
App()
Os seguintes controles especiais podem ser executados quando uma aplicação Pyxel estiver sendo executada.
Alt(Option)+1
Salva uma captura de tela para a área de trabalhoAlt(Option)+2
Reinicia o momento inicial do vídeo de captura de tela.Alt(Option)+3
Salva um vídeo de captura de tela (gif) para a área de trabalho (até 30 segundos)Alt(Option)+0
Ativa/desativa o monitor de performance (fps, update time, e draw time)Alt(Option)+Enter
Ativa/desativa tela cheia
Existem os seguintes métodos para criar imagens para o Pyxel:
- Criar uma imagem a partir de uma lista de strings com a função
Image.set
- Carregar um arquivo png na paleta de cores do Pyxel com a função
Image.load
- Criar imagens com o Pyxel Editor (WIP)
Por favor, consulte a referência do API para uso das funções Image.set
e Image.load
.
Como o Pyxel usa a mesma paleta do PICO-8, ao criar imagens png para o Pyxel, é recomendável usar o Aseprite no modo de paleta PICO-8.
-
width
,height
A largura e a altura da tela. -
frame_count
O número dos quadros decorridos -
init(width, height, [caption], [scale], [palette], [fps], [border_width], [border_color])
Inicializa a aplicação Pyxel com o tamanho de tela (width
,height
) Também é possível especificar o título da janela comcaption
, a ampliação do display comscale
, a cor da paleta compalette
, a taxa de quadros comfps
e a largura e cor da margem de fora da tela comborder_width
eborder_color
-
run(update, draw)
Inicia a aplicação Pyxel e chama a funçãoupdate
para atualização de quadros e a funçãodraw
para desenhar -
quit()
Encerra a aplicação Pyxel no fim do quadro atual
-
mouse_x
,mouse_y
A posição atual do cursor do mouse -
btn(key)
RetornaTrue
sekey
é pressionada, caso contrário retornaFalse
(lista de definições de teclas) -
btnp(key, [hold], [period])
RetornaTrue
sekey
for pressionada naquele quadro, caso contrário retornaFalse
. Quandohold
eperiod
são especificados,True
será retornado durante o intervalo de quadrosperiod
, enquantokey
estiver pressionada por mais quehold
quadros -
btnr(key)
RetornaTrue
sekey
for solta naquele quadro, caso contrário retornaFalse
-
image(img)
Opera o banco de imagensimg
(0-3) (veja a classe Image) e.g.pyxel.image(0).load(0, 0, 'title.png')
-
clip(x1, y1, x2, y2)
Define a área de desenho da tela para (x1
,y1
)-(x2
,y2
). Reseta a área de desenho comclip()
-
pal(col1, col2)
Substitui a corcol1
comcol2
ao desenhar. Usepal()
para resetar para a paleta inicial -
cls(col)
Limpar a tela com a corcol
-
pix(x, y, col)
Desenha um pixel de corcol
em (x
,y
) -
line(x1, y1, x2, y2, col)
Desenha uma linha da corcol
de (x1
,y1
) até (x2
,y2
) -
rect(x1, y1, x2, y2, col)
Desenha um retângulo da corcol
de (x1
,y1
) até (x2
,y2
) -
rectb(x1, y1, x2, y2, col)
Desenha o contorno de um retângulo da corcol
de (x1
,y1
) até (x2
,y2
) -
circ(x, y, r, col)
Desenha um círculo de raior
e corcol
em (x
,y
) -
circb(x, y, r, col)
Desenha o contorno de um círculo de raior
e corcol
em (x
,y
) -
blt(x, y, img, sx, sy, w, h, [colkey])
Copia a região de tamanho (w
,h
) de (sx
,sy
) do banco de imagensimg
(0-3) para (x
,y
). Se um valor negativo for definido paraw
e/ouh
, será invertido horizontalmente e/ou verticalmente. Secolkey
for especificado, será tratado como cor transparente. -
text(x, y, s, col)
Desenha uma strings
de corcol
em (x
,y
)
-
sound(snd)
Opera o banco de sonssnd
(0-63) (ver a classe Sound) e.g.pyxel.sound(0).speed = 60
-
play(ch, snd, loop=False)
Reproduz o banco de somsnd
(0-63) no canalch
(0-3). Tocar em ordem quandpsnd
for uma lista -
stop(ch)
Interrompe a reprodução do canalch
(0-3)
-
width
,height
Largura e altura da Image -
data
Os dados da Image (NumPy array) -
set(x, y, data)
Define a imagem como uma lista de strings em (x
,y
) e.g.pyxel.image(0).set(10, 10, ['1234', '5678', '9abc', 'defg'])
-
load(x, y, filename)
Lê uma imagem png em (x
,y
) -
copy(x, y, img, sx, sy, width, height)
Copia a região de tamanho (width
,height
) de (sx
,sy
) do banco de imagensimg
(0-3) para (x
,y
)
-
note
Lista de notas(0-127) (33 = 'A2' = 440Hz) -
tone
Lista de tons(0:Triagnle / 1:Square / 2:Pulse / 3:Noise) -
volume
List de volume(0-7) -
effect
Lista de efeitos(0:None / 1:Slide / 2:Vibrato / 3:FadeOut) -
speed
Duração de uma nota(120 = 1 second per tone) -
set(note, tone, volume, effect, speed)
Define uma nota, tom, volume e efeito com uma string. Se o tom, volume e duração do efeito forem mais curtas que a nota, será repetida do começo -
set_note(note)
Define a nota com uma string consistindo de 'CDEFGAB'+'#-'+'0123' ou 'R'. Indiferente a maiúsculas e minúsculas e espaços são ignorados e.g.pyxel.sound(0).set_note('G2B-2D3R RF3F3F3')
-
set_tone(tone)
Define um tom com uma string consistindo de 'TSPN'. Indiferente a maiúsculas e minúsculas e espaços são ignorados e.g.pyxel.sound(0).set_tone('TTSS PPPN')
-
set_volume(volume)
Define o volume com uma string consistindo de '01234567'. Indiferente a maiúsculas e minúsculas e espaços são ignorados
e.g.pyxel.sound(0).set_volume('7777 7531')
-
set_effect(effect)
Define o efeito com uma string consistindo de 'NSVF'. Indiferente a maiúsculas e minúsculas e espaços são ignorados
e.g.pyxel.sound(0).set_effect('NFNF NVVS')
Pyxel is under MIT license. It can be reused within proprietary software provided that all copies of the licensed software include a copy of the MIT License terms and the copyright notice.