Como criar um jogo 2D com Python e a Biblioteca Arcade

Python é uma linguagem excelente para as pessoas que aprendem a programar, e perfeita para quem quer “fazer coisas” e não gastar montes de tempo em código boilerplate. Arcade é uma biblioteca Python para a criação de jogos de vídeo 2D que é fácil de começar a usar, e muito capaz como você ganha experiência. Neste artigo, vou explicar como começar a usar Python e Arcade para programar jogos de vídeo.

comecei o desenvolvimento no Arcade depois de ensinar os alunos usando a Biblioteca PyGame., Eu ensinei pessoalmente usando PyGame por quase 10 anos, e eu desenvolvi ProgramArcadeGames.com para ensinar online. O PyGame é óptimo, mas acabei por sentir que estava a perder tempo a encobrir insectos que nunca foram corrigidos.

eu me preocupava em ensinar coisas como o loop evento, que não era mais a maneira como nós codificamos. Tinha uma secção inteira em que explicava porque é que as coordenadas y foram invertidas. Porque PyGame foi raramente atualizado e é baseado em uma antiga biblioteca SDL 1, ao invés de algo mais moderno como OpenGL, eu não tinha muita esperança para o futuro.,

I wanted a library that was easier to use, more powerful, and used some of the new features of Python 3, like decorators and type-hinting. Arcade é isso. E é assim que se começa.

Instalação

Arcade, como muitos outros pacotes, está disponível via PyPi, o que significa que você pode instalar Arcade usando o pip comando (ou o pipenv de comando)., Se você já tem Python instalado, você pode, provavelmente, basta abrir um prompt de comando do Windows e digite:

pip install arcade

Ou no MacOS e Linux digite:

pip3 install arcade

Para mais instruções detalhadas de instalação, você pode consultar o Arcade documentação de instalação.

desenho simples

pode abrir uma janela e criar desenhos simples com apenas algumas linhas de código. Vamos criar um exemplo que desenha uma cara sorridente como a figura abaixo:

o script abaixo mostra como você pode usar os comandos de desenho do Arcade para fazer isso., Note que você não precisa saber como usar classes ou até mesmo definir funções. Programação com feedback visual rápido é ótimo para quem quer começar a aprender a programar.

usando funções

é claro, escrever código no contexto global não é boa forma. Felizmente melhorar o seu programa usando funções é fácil. Aqui podemos ver um exemplo de um desenho de um pinheiro num local específico (x, y) usando uma função:

para o exemplo completo, veja desenho com funções.,

o programador mais experiente saberá que os programas gráficos modernos primeiro carregam informações de desenho para a placa gráfica, e, em seguida, pedir a placa gráfica para desenhá-lo mais tarde como um lote. Arcade também suporta isso. Desenhar 10.000 retângulos individualmente leva cerca de 0,800 segundos. Desenhá-los como um lote leva menos que 0,001 segundos.

a classe da janela

programas maiores normalmente derivam da classe da janela, ou usam decoradores. Isso permite a um programador escrever código para lidar com o desenho, atualização e manipulação de entrada do Usuário., A template for a starting a Window-based program is below.

A classe Window tem vários métodos que seus programas podem substituir para fornecer funcionalidade ao programa. Aqui estão alguns dos mais usados:

  • on_draw: todo o código para desenhar a tela vai para aqui.
  • update: todo o código para mover os seus itens e executar a lógica do jogo vai para aqui. Isto é chamado cerca de 60 vezes por segundo.,
  • on_key_press: lidar com eventos quando uma chave é pressionada, como dar a um jogador uma velocidade.
  • on_key_release: lidar quando uma chave é lançada, aqui você pode impedir que um jogador se mova.
  • on_mouse_motion: isto é chamado sempre que o rato se move.
  • on_mouse_press: chamado quando um botão do rato é pressionado.
  • set_viewport: esta função é usada em jogos de deslocamento, quando você tem um mundo muito maior do que o que pode ser visto em uma tela., Calling set_viewport allows a programmer to set what part of that world is currently visible.

as imagens

as imagens são uma forma fácil de criar um objecto bit mapeado 2D no Arcade. Arcade tem métodos que fazem com que seja fácil desenhar, mover e animar sprites. Você também pode usar sprites facilmente para detectar colisões entre objetos.

criar uma imagem

criar uma instância da classe Sprite de Arcade fora de um gráfico é fácil. Um programador só precisa do nome de arquivo de uma imagem para basear a imagem fora de, e opcionalmente um número para escalar a imagem para cima ou para baixo., Por exemplo:

SPRITE_SCALING_COIN = 0.2
coin = arcade.Sprite("coin_01.png", SPRITE_SCALING_COIN)

este código irá criar uma sprite usando a imagem armazenada em coin_01.png. A imagem será reduzida para 20% da sua altura e largura originais.

as listas de imagens

as imagens estão normalmente organizadas em listas. Estas listas facilitam a gestão das imagens. As imagens de uma lista irão usar o OpenGL para desenhar em lote as imagens como um grupo. O código abaixo define um jogo com um jogador, e um monte de moedas para o jogador coletar. Usamos duas listas, uma para o jogador e outra para as moedas.,

podemos facilmente tirar todas as moedas, a moeda de lista:

def on_draw(self):
""" Draw everything """
arcade.start_render()
self.coin_list.draw()
self.player_list.draw()

Detecção de sprite colisões

A função check_for_collision_with_list permite-nos ver se o sprite é executado em outro sprite em uma lista. Podemos usar isso para ver todas as moedas com as quais o jogador sprite está em contato. Usando um simplesfor loop, podemos nos livrar da moeda do jogo e aumentar nossa pontuação.

para o exemplo completo, Ver collect_coins.py

física de jogos

muitos jogos incluem algum tipo de física., Os mais simples são os programas de cima para baixo que impedem o jogador de caminhar através das paredes. Platformers adicionam mais complexidade com a gravidade e plataformas que se movem. Alguns jogos usam um motor de física 2D completo com massa, fricção, molas, e muito mais.

jogos de cima para baixo

para jogos simples de cima para baixo, um programa Arcade precisa de uma lista de paredes que o jogador (ou qualquer outra coisa) não pode passar. Eu geralmente chamo isso de wall_list., Em seguida, um motor de física é criado no Window classe de configuração do código:

self.physics_engine = arcade.PhysicsEngineSimple(self.player_sprite, self.wall_list)

player_sprite é dado um vetor de movimento com os seus dois atributos de change_x e change_y. Um exemplo simples de fazer isso seria fazer com que o jogador se movesse com o teclado. Por exemplo, isso pode estar no Filho personalizado do Window classe:

embora esse código defina a velocidade do jogador, ele não move o jogador., In the update method of theWindow class, callingphysics_engine.update() will move the player, but not through walls.

def update(self, delta_time):
""" Movement and game logic """
self.physics_engine.update()

para um exemplo completo veja sprite_move_walls.py.

Platformers

mover-se para uma plataforma de visão lateral é bastante fácil. Um programador só precisa mudar o motor de física para PhysicsEnginePlatformer e Adicionar na constante de gravidade.

self.physics_engine = arcade.PhysicsEnginePlatformer(self.player_sprite,
self.wall_list,
gravity_constant=GRAVITY)

pode usar um programa como o mosaico para colocar as peças / blocos que compõem o seu nível.

por exemplo, veja sprite_tiled_map.,py.

para física 2D completa, você pode integrar a biblioteca PyMunk.

aprenda por exemplo

uma das melhores maneiras de aprender é por exemplo. A Biblioteca Arcade tem uma longa lista de programas de exemplo que uma pessoa pode desenhar para criar jogos. Estes exemplos cada um mostram um conceito de jogo que os alunos têm pedido em minhas aulas ou on-line ao longo dos anos.

executar qualquer um destes demos é fácil uma vez que Arcade foi instalado., Cada uma das amostras tem um comentário no início do programa, com um comando que você pode digitar na linha de comando para executar o exemplo, por exemplo:

python -m arcade.examples.sprite_moving_platforms

Resumo

Arcade permite que você iniciar a programação de gráficos e jogos com fácil de entender o código. Muitos novos programadores criaram grandes jogos não muito tempo depois de começar. Experimenta!

para saber mais, participe da palestra de Paul Vincent Craven, Easy 2d Game Creation com Arcade, em PyCon Cleveland 2018.

Share

Deixe uma resposta

O seu endereço de email não será publicado. Campos obrigatórios marcados com *