[ English | 中文 | Deutsch | Español | Français | Italiano | 日本語 | 한국어 | Português | Русский | Türkçe | Українська ]
Pyxel é um motor de jogos retro para Python.
As especificações são inspiradas em consoles de jogos retro, como o suporte para apenas 16 cores e 4 canais de som, permitindo que você desfrute facilmente da criação de jogos com estilo de arte em pixel.
O desenvolvimento do Pyxel é impulsionado pelo feedback dos usuários. Por favor, dê uma estrela ao Pyxel no GitHub!
As especificações e APIs do Pyxel são inspiradas no PICO-8 e no TIC-80.
O Pyxel é de código aberto sob a Licença MIT e é gratuito para usar. Vamos começar a criar jogos retrô com o Pyxel!
- Funciona no Windows, Mac, Linux e Web
- Programação em Python
- Paleta de 16 cores
- 3 bancos de imagem de 256x256
- 8 mapas de blocos de 256x256
- 4 canais com 64 sons definíveis
- 8 faixas de música que podem combinar quaisquer sons
- Entradas de teclado, mouse e gamepad
- Ferramentas de edição de imagens e sons
- Cores, canais e bancos extensíveis pelo usuário
Após instalar o Python3 (versão 3.8 ou superior), execute o seguinte comando:
pip install -U pyxel
Ao instalar o Python usando o instalador oficial, certifique-se de marcar a opção Add Python 3.x to PATH
para habilitar o comando pyxel
.
Após instalar o Homebrew, execute os seguintes comandos:
brew install pipx
pipx ensurepath
pipx install pyxel
Para atualizar o Pyxel após a instalação, execute pipx upgrade pyxel
.
Após instalar o pacote SDL2 (libsdl2-dev
para Ubuntu), Python3 (versão 3.8 ou superior) e python3-pip
, execute o seguinte comando:
sudo pip3 install -U pyxel
Se o comando anterior falhar, considere construir o Pyxel a partir do código-fonte seguindo as instruções no Makefile.
A versão web do Pyxel não requer a instalação do Python ou do Pyxel e funciona em PCs, smartphones e tablets com navegadores web compatíveis.
Para instruções detalhadas, consulte esta página.
Após instalar o Pyxel, você pode copiar os exemplos para o diretório atual com o seguinte comando:
pyxel copy_examples
Os seguintes exemplos serão copiados para o seu diretório atual:
01_hello_pyxel.py | Aplicativo mais simples | Demonstração | Código |
02_jump_game.py | Jogo de salto com arquivo de recursos Pyxel | Demonstração | Código |
03_draw_api.py | Demonstração das APIs de desenho | Demonstração | Código |
04_sound_api.py | Demonstração das APIs de som | Demonstração | Código |
05_color_palette.py | Lista de paletas de cores | Demonstração | Código |
06_click_game.py | Jogo de clique do mouse | Demonstração | Código |
07_snake.py | Jogo da cobrinha com BGM | Demonstração | Código |
08_triangle_api.py | Demonstração das APIs de desenho de triângulos | Demonstração | Código |
09_shooter.py | Shoot 'em up com transições de tela | Demonstração | Código |
10_platformer.py | Jogo de plataforma em rolagem lateral com mapa | Demonstração | Código |
11_offscreen.py | Renderização offscreen com a classe Image | Demonstração | Código |
12_perlin_noise.py | Animação de ruído de Perlin | Demonstração | Código |
13_bitmap_font.py | Desenho de uma fonte bitmap | Demonstração | Código |
14_synthesizer.py | Sintetizador utilizando recursos de expansão de áudio | Demonstração | Código |
15_tiled_map_file.py | Carregando e desenhando um Tiled Map File (.tmx) | Demonstração | Código |
16_transform.py | Rotação e dimensionamento de imagens | Demonstração | Código |
99_flip_animation.py | Animação com a função flip (apenas para plataformas não web) | Demonstração | Código |
30sec_of_daylight.pyxapp | Jogo vencedor do 1º Pyxel Jam por Adam | Demonstração | Código |
megaball.pyxapp | Jogo de física de bola de arcade por Adam | Demonstração | Código |
8bit-bgm-gen.pyxapp | Gerador de música de fundo por frenchbread | Demonstração | Código |
Os exemplos podem ser executados com os seguintes comandos:
cd pyxel_examples
pyxel run 01_hello_pyxel.py
pyxel play 30sec_of_daylight.pyxapp
No seu script Python, importe o módulo Pyxel, especifique o tamanho da janela com a função init
e, em seguida, inicie o aplicativo 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 a função update
, que processa as atualizações de quadro, e a função draw
, que lida com a exibição na tela.
Em um aplicativo real, é recomendável encapsular o código Pyxel em uma classe, como mostrado 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, 8, 8, 9)
App()
Para criar gráficos simples sem animação, você pode usar a função show
para simplificar seu código.
import pyxel
pyxel.init(120, 120)
pyxel.cls(1)
pyxel.circb(60, 60, 40, 7)
pyxel.show()
Um script criado pode ser executado usando o comando python
:
python PYTHON_SCRIPT_FILE
Ele também pode ser executado com o comando pyxel run
:
pyxel run PYTHON_SCRIPT_FILE
Além disso, o comando pyxel watch
monitora alterações em um diretório especificado e executa automaticamente o programa quando mudanças são detectadas:
pyxel watch WATCH_DIR PYTHON_SCRIPT_FILE
A vigilância do diretório pode ser interrompida pressionando Ctrl(Command)+C
.
Durante a execução de uma aplicação Pyxel, as seguintes operações de teclas especiais podem ser realizadas:
Esc
Sair do aplicativoAlt(Option)+1
Salvar a captura de tela na área de trabalhoAlt(Option)+2
Reiniciar o tempo de início da gravação do vídeo de captura de telaAlt(Option)+3
Salvar um vídeo de captura de tela na área de trabalho (até 10 segundos)Alt(Option)+8
ouA+B+X+Y+DL
no gamepad
Alterna o modo de escala da tela entre máximo e inteiroAlt(Option)+9
ouA+B+X+Y+DR
no gamepad
Alternar entre os modos de tela (Crisp/Smooth/Retro)Alt(Option)+0
ouA+B+X+Y+DU
no gamepad
Alternar o monitor de desempenho (FPS/update
tempo/draw
tempo)Alt(Option)+Enter
ouA+B+X+Y+DD
no gamepad
Alternar para tela cheiaShift+Alt(Option)+1/2/3
Salvar o banco de imagens 0, 1 ou 2 na área de trabalhoShift+Alt(Option)+0
Salvar a paleta de cores atual na área de trabalho
O Pyxel Editor pode criar imagens e sons usados em uma aplicação Pyxel.
Você pode iniciar o Pyxel Editor com o seguinte comando:
pyxel edit PYXEL_RESOURCE_FILE
Se o arquivo de recurso Pyxel especificado (.pyxres) existir, ele será carregado. Se não existir, um novo arquivo com o nome especificado será criado. Se o arquivo de recurso for omitido, um novo arquivo chamado my_resource.pyxres
será criado.
Após iniciar o Pyxel Editor, você pode alternar para outro arquivo de recurso arrastando e soltando-o no Pyxel Editor.
O arquivo de recurso criado pode ser carregado usando a função load
.
O Pyxel Editor tem os seguintes modos de edição.
Editor de Imagem
O modo para editar a imagem em cada banco de imagens.
Você pode arrastar e soltar um arquivo de imagem (PNG/GIF/JPEG) no editor de imagem para carregar a imagem no banco de imagens atualmente selecionado.
Editor de Mapas de Ladrilhos
O modo para editar os mapas de ladrilhos que organizam imagens dos bancos de imagens em um padrão de ladrilhos.
Arraste e solte um arquivo TMX (Tiled Map File) no editor de mapas de ladrilhos para carregar sua camada na ordem de desenho que corresponde ao número do mapa de ladrilhos atualmente selecionado.
Editor de Som
O modo para editar os sons utilizados para melodias e efeitos sonoros.
Editor de Música
O modo para editar músicas em que os sons são organizados em ordem de reprodução.
Imagens e mapas de ladrilhos do Pyxel também podem ser criados usando os seguintes métodos:
- Crie uma imagem a partir de uma lista de strings usando a função
Image.set
ou a funçãoTilemap.set
- Carregue um arquivo de imagem (PNG/GIF/JPEG) na paleta do Pyxel com a função
Image.load
Os sons do Pyxel também podem ser criados usando o seguinte método:
- Crie um som a partir de strings com a função
Sound.set
ou a funçãoMusic.set
Consulte a referência da API para o uso dessas funções.
O Pyxel suporta um formato de arquivo de distribuição de aplicativo dedicado (arquivo de aplicativo Pyxel) que é multiplataforma.
Um arquivo de aplicativo Pyxel (.pyxapp) é criado usando o comando pyxel package
:
pyxel package APP_DIR STARTUP_SCRIPT_FILE
Se você precisar incluir recursos ou módulos adicionais, coloque-os no diretório do aplicativo.
Os metadados podem ser exibidos em tempo de execução, especificando-os no seguinte formato dentro do script de inicialização. Os campos além de title
e author
são opcionais.
# title: Pyxel Platformer
# author: Takashi Kitao
# desc: A Pyxel platformer example
# site: https://github.com/kitao/pyxel
# license: MIT
# version: 1.0
O arquivo de aplicativo criado pode ser executado usando o comando pyxel play
:
pyxel play PYXEL_APP_FILE
Um arquivo de aplicativo Pyxel também pode ser convertido em um executável ou um arquivo HTML usando os comandos pyxel app2exe
ou pyxel app2html
.
-
width
,height
A largura e altura da tela -
frame_count
O número de quadros transcorridos -
init(width, height, [title], [fps], [quit_key], [display_scale], [capture_scale], [capture_sec])
Inicializa a aplicação Pyxel com o tamanho da tela (width
,height
). As seguintes opções podem ser especificadas: o título da janela comtitle
, a taxa de quadros comfps
, a tecla para encerrar a aplicação comquit_key
, a escala de exibição comdisplay_scale
, a escala de captura de tela comcapture_scale
e o tempo máximo de gravação do vídeo de captura de tela comcapture_sec
.
Exemplo:pyxel.init(160, 120, title="My Pyxel App", fps=60, quit_key=pyxel.KEY_NONE, capture_scale=3, capture_sec=0)
-
run(update, draw)
Inicia a aplicação Pyxel e chama a funçãoupdate
para atualização de quadros e a funçãodraw
para desenhar. -
show()
Mostra a tela e aguarda até que a teclaEsc
seja pressionada. -
flip()
Atualiza a tela em um quadro. A aplicação encerra quando a teclaEsc
é pressionada. Esta função não está disponível na versão web. -
quit()
Encerra a aplicação Pyxel.
-
load(filename, [excl_images], [excl_tilemaps], [excl_sounds], [excl_musics])
Carrega o arquivo de recursos (.pyxres). Se uma opção for definida comoTrue
, o recurso correspondente será excluído do carregamento. Se um arquivo de paleta (.pyxpal) com o mesmo nome existir no mesmo local do arquivo de recursos, as cores da paleta de exibição também serão atualizadas. O arquivo de paleta contém entradas hexadecimais para as cores de exibição (por exemplo,1100FF
), separadas por novas linhas. O arquivo de paleta também pode ser usado para alterar as cores exibidas no Pyxel Editor. -
user_data_dir(vendor_name, app_name)
Retorna o diretório de dados do usuário criado com base emvendor_name
eapp_name
. Se o diretório não existir, ele será criado automaticamente. Ele é usado para armazenar pontuações altas, progresso do jogo e dados semelhantes.
Exemplo:print(pyxel.user_data_dir("Takashi Kitao", "Pyxel Shooter"))
-
mouse_x
,mouse_y
A posição atual do cursor do mouse -
mouse_wheel
O valor atual da roda do mouse -
btn(key)
RetornaTrue
se a teclakey
estiver pressionada, caso contrário, retornaFalse
. (Lista de definições de teclas) -
btnp(key, [hold], [repeat])
RetornaTrue
se a teclakey
for pressionada naquele quadro, caso contrário, retornaFalse
. Sehold
erepeat
forem especificados, depois que a teclakey
for mantida pressionada porhold
quadros ou mais,True
será retornado a cadarepeat
quadros. -
btnr(key)
RetornaTrue
se a teclakey
for liberada naquele quadro, caso contrário, retornaFalse
. -
mouse(visible)
Mostra o cursor do mouse sevisible
forTrue
e o oculta sevisible
forFalse
. A posição do cursor continua a ser atualizada mesmo quando ele está oculto.
-
colors
Lista de cores da paleta de exibição. A cor de exibição é especificada por um valor numérico de 24 bits. Usecolors.from_list
ecolors.to_list
para atribuir e recuperar diretamente listas Python.
Exemplo:old_colors = pyxel.colors.to_list(); pyxel.colors.from_list([0x111111, 0x222222, 0x333333]); pyxel.colors[15] = 0x112233
-
images
Lista dos bancos de imagens (instâncias da classe Image) (0-2)
Exemplo:pyxel.images[0].load(0, 0, "title.png")
-
tilemaps
Lista dos mapas de ladrilhos (instâncias da classe Tilemap) (0-7) -
clip(x, y, w, h)
Define a área de desenho da tela de (x
,y
) com uma largura dew
e uma altura deh
. Chameclip()
para redefinir a área de desenho para a tela inteira. -
camera(x, y)
Altera as coordenadas do canto superior esquerdo da tela para (x
,y
). Chamecamera()
para redefinir as coordenadas do canto superior esquerdo para (0
,0
). -
pal(col1, col2)
Substitui a corcol1
porcol2
ao desenhar. Chamepal()
para redefinir para a paleta inicial. -
dither(alpha)
Aplica dithering (pseudo-transparência) ao desenhar. Definaalpha
na faixa de0.0
-1.0
, onde0.0
é transparente e1.0
é opaco. -
cls(col)
Limpa a tela com a corcol
. -
pget(x, y)
Obtém a cor do pixel em (x
,y
). -
pset(x, y, col)
Desenha um pixel da corcol
em (x
,y
). -
line(x1, y1, x2, y2, col)
Desenha uma linha da corcol
de (x1
,y1
) a (x2
,y2
). -
rect(x, y, w, h, col)
Desenha um retângulo de larguraw
, alturah
e corcol
de (x
,y
). -
rectb(x, y, w, h, col)
Desenha o contorno de um retângulo de larguraw
, alturah
e corcol
de (x
,y
). -
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
). -
elli(x, y, w, h, col)
Desenha uma elipse de larguraw
, alturah
e corcol
de (x
,y
). -
ellib(x, y, w, h, col)
Desenha o contorno de uma elipse de larguraw
, alturah
e corcol
de (x
,y
). -
tri(x1, y1, x2, y2, x3, y3, col)
Desenha um triângulo com vértices em (x1
,y1
), (x2
,y2
), (x3
,y3
) e corcol
. -
trib(x1, y1, x2, y2, x3, y3, col)
Desenha o contorno de um triângulo com vértices em (x1
,y1
), (x2
,y2
), (x3
,y3
) e corcol
. -
fill(x, y, col)
Preenche a área conectada com a mesma cor de (x
,y
) com a corcol
. -
blt(x, y, img, u, v, w, h, [colkey], [rotate], [scale])
Copia a região de tamanho (w
,h
) de (u
,v
) do banco de imagensimg
(0-2) para (x
,y
). Se um valor negativo for atribuído aw
e/ouh
, a região será invertida horizontalmente e/ou verticalmente. Secolkey
for especificado, ele será tratado como uma cor transparente. Serotate
(em graus),scale
(1.0 = 100%) ou ambos forem especificados, as transformações correspondentes serão aplicadas.
bltm(x, y, tm, u, v, w, h, [colkey], [rotate], [scale])
Copia a região de tamanho (w
,h
) de (u
,v
) do mapa de ladrilhostm
(0-7) para (x
,y
). Se um valor negativo for atribuído aw
e/ouh
, a região será invertida horizontalmente e/ou verticalmente. Secolkey
for especificado, ele será tratado como uma cor transparente. Serotate
(em graus),scale
(1.0 = 100%) ou ambos forem especificados, as transformações correspondentes serão aplicadas. O tamanho de um ladrilho é 8x8 pixels e é armazenado em um mapa de ladrilhos como uma tupla de(tile_x, tile_y)
.
text(x, y, s, col)
Desenha uma strings
com a corcol
em (x
,y
).
-
sounds
Lista dos sons (instâncias da classe Sound) (0-63)
Exemplo:pyxel.sounds[0].speed = 60
-
musics
Lista das músicas (instâncias da classe Music) (0-7) -
play(ch, snd, [tick], [loop], [resume])
Reproduz o somsnd
(0-63) no canalch
(0-3). Sesnd
for uma lista, os sons serão reproduzidos em sequência. A posição inicial da reprodução pode ser especificada portick
(1 tick = 1/120 segundos). Seloop
for definido comoTrue
, a reprodução em loop será realizada. Para retomar o som anterior após o término da reprodução, definaresume
comoTrue
. -
playm(msc, [tick], [loop])
Reproduz a músicamsc
(0-7). A posição inicial da reprodução pode ser especificada portick
(1 tick = 1/120 segundos). Seloop
for definido comoTrue
, a reprodução em loop será realizada. -
stop([ch])
Interrompe a reprodução do canal especificadoch
(0-3). Chamestop()
para interromper todos os canais. -
play_pos(ch)
Obtém a posição de reprodução do som do canalch
(0-3) como uma tupla de(sound_no, note_no)
. RetornaNone
quando a reprodução for interrompida.
-
ceil(x)
Retorna o menor número inteiro maior ou igual ax
. -
floor(x)
Retorna o maior número inteiro menor ou igual ax
. -
sgn(x)
Retorna1
quandox
é positivo,0
quando é0
e-1
quando é negativo. -
sqrt(x)
Retorna a raiz quadrada dex
. -
sin(deg)
Retorna o seno dedeg
graus. -
cos(deg)
Retorna o cosseno dedeg
graus. -
atan2(y, x)
Retorna a arctangente dey
/x
em graus. -
rseed(seed)
Define a semente do gerador de números aleatórios. -
rndi(a, b)
Retorna um número inteiro aleatório maior ou igual aa
e menor ou igual ab
. -
rndf(a, b)
Retorna um número flutuante aleatório maior ou igual aa
e menor ou igual ab
. -
nseed(seed)
Define a semente do ruído Perlin. -
noise(x, [y], [z])
Retorna o valor do ruído Perlin para as coordenadas especificadas.
-
width
,height
A largura e altura da imagem -
set(x, y, data)
Define a imagem em (x
,y
) usando uma lista de strings.
Exemplo:pyxel.images[0].set(10, 10, ["0123", "4567", "89ab", "cdef"])
-
load(x, y, filename)
Carrega um arquivo de imagem (PNG/GIF/JPEG) em (x
,y
). -
pget(x, y)
Obtém a cor do pixel em (x
,y
). -
pset(x, y, col)
Desenha um pixel com a corcol
em (x
,y
).
-
width
,height
A largura e altura do mapa de ladrilhos -
imgsrc
O banco de imagens (0-2) referenciado pelo mapa de ladrilhos -
set(x, y, data)
Define o mapa de ladrilhos em (x
,y
) usando uma lista de strings.
Exemplo:pyxel.tilemap(0).set(0, 0, ["0000 0100 a0b0", "0001 0101 a1b1"])
-
load(x, y, filename, layer)
Carrega a camada na ordem de desenholayer
(0-) do arquivo TMX (Tiled Map File) em (x
,y
). -
pget(x, y)
Obtém o ladrilho em (x
,y
). Um ladrilho é representado como uma tupla de(tile_x, tile_y)
. -
pset(x, y, tile)
Desenha umladrilho
em (x
,y
). Um ladrilho é representado como uma tupla de(tile_x, tile_y)
.
-
notes
Lista de notas (0-127). Quanto maior o número, mais alta a nota. A nota33
corresponde a 'A2'(440Hz). As pausas são representadas por-1
. -
tones
Lista de tons (0:Triangle / 1:Square / 2:Pulse / 3:Noise) -
volumes
Lista de volumes (0-7) -
effects
Lista de efeitos (0:None / 1:Slide / 2:Vibrato / 3:FadeOut / 4:Half-FadeOut / 5:Quarter-FadeOut) -
speed
Velocidade de reprodução.1
é a mais rápida e, quanto maior o número, mais lenta a reprodução. Em120
, a duração de uma nota é de 1 segundo. -
set(notes, tones, volumes, effects, speed)
Define notas, tons, volumes e efeitos usando uma string. Se o comprimento de tons, volumes ou efeitos for menor que o de notas, eles serão repetidos desde o início. -
set_notes(notes)
Define as notas usando uma string composta por 'CDEFGAB'+'#-'+'01234' ou 'R'. Não diferencia maiúsculas de minúsculas e ignora espaços em branco.
Exemplo:pyxel.sounds[0].set_notes("G2B-2D3R RF3F3F3")
-
set_tones(tones)
Define os tons com uma string composta por 'TSPN'. Não diferencia maiúsculas de minúsculas e ignora espaços em branco.
Exemplo:pyxel.sounds[0].set_tones("TTSS PPPN")
-
set_volumes(volumes)
Define os volumes com uma string composta por '01234567'. Não diferencia maiúsculas de minúsculas e ignora espaços em branco.
Exemplo:pyxel.sounds[0].set_volumes("7777 7531")
-
set_effects(effects)
Define os efeitos com uma string composta por 'NSVFHQ'. Não diferencia maiúsculas de minúsculas e ignora espaços em branco.
Exemplo:pyxel.sounds[0].set_effects("NFNF NVVS")
-
seqs
Uma lista bidimensional de sons (0-63) em vários canais -
set(seq0, seq1, seq2, ...)
Define as listas de sons (0-63) para cada canal. Se uma lista vazia for especificada, esse canal não será usado para reprodução.
Exemplo:pyxel.musics[0].set([0, 1], [], [3])
O Pyxel inclui uma "API Avançada" que não é mencionada nesta referência, pois pode confundir os usuários ou exigir conhecimento especializado para uso.
Se você tem confiança em suas habilidades, tente criar obras incríveis usando isto como guia!
Use o Rastreador de Problemas para enviar relatórios de bugs e solicitações de recursos ou melhorias. Antes de enviar um novo problema, verifique se não há problemas semelhantes abertos.
Qualquer pessoa que teste manualmente o código e relate bugs ou sugestões de melhorias no Rastreador de Problemas é muito bem-vinda!
Patches e correções são aceitos na forma de pull requests (PRs). Certifique-se de que o problema que o pull request aborda está aberto no Rastreador de Problemas.
Enviar um pull request implica que você concorda em licenciar sua contribuição sob a Licença MIT.
O Pyxel é licenciado sob a Licença MIT. Pode ser reutilizado em software proprietário, desde que todas as cópias do software ou suas partes substanciais incluam uma cópia dos termos da Licença MIT e um aviso de copyright.
O Pyxel está buscando patrocinadores no GitHub Sponsors. Considere patrocinar o Pyxel para apoiar sua manutenção contínua e desenvolvimento de recursos. Como benefício, os patrocinadores podem consultar diretamente o desenvolvedor do Pyxel. Para mais detalhes, por favor, visite esta página.