Cómo crear un juego 2D con Python y la Biblioteca Arcade

Python es un lenguaje excepcional para las personas que aprenden a programar, y perfecto para cualquiera que quiera «hacer cosas» y no gastar un montón de tiempo en código repetitivo. Arcade es una biblioteca de Python para crear videojuegos 2D que es fácil de usar y muy capaz a medida que gana experiencia. En este artículo, explicaré cómo comenzar a usar Python y Arcade para programar videojuegos.

comencé el desarrollo en Arcade después de enseñar a los estudiantes usando la biblioteca PyGame., Enseñé en persona usando PyGame durante casi 10 años, y desarrollé ProgramArcadeGames.com para enseñar en línea. PyGame es genial, pero finalmente sentí que estaba perdiendo el tiempo teniendo que cubrir errores que nunca se arreglaron.

me preocupaba enseñar cosas como el bucle de eventos, que ya no era la forma en que codificamos. Tenía toda una sección en la que expliqué por qué las coordenadas y estaban invertidas. Debido a que PyGame rara vez se actualizó y se basa en una antigua biblioteca SDL 1, en lugar de algo más moderno como OpenGL, no tenía mucha esperanza para el futuro.,

quería una biblioteca que fuera más fácil de usar, más potente y usara algunas de las nuevas características de Python 3, como decoradores y sugerencias de tipos. Es Arcade. Y así es como empezar.

Installation

Arcade, como muchos otros paquetes, está disponible a través de PyPi, lo que significa que puede instalar Arcade utilizando el comando pip (o el comando pipenv)., Si ya tiene instalado Python, es probable que solo abra un símbolo del sistema en Windows y escriba:

pip install arcade

o en MacOS y Linux escriba:

pip3 install arcade

para obtener instrucciones de instalación más detalladas, Puede consultar la documentación de instalación de Arcade.

dibujo Simple

puede abrir una ventana y crear dibujos simples con solo unas pocas líneas de código. Vamos a crear un ejemplo que dibuje una cara sonriente como la figura de abajo:

el script de abajo muestra cómo puedes usar los comandos de dibujo de Arcade para hacer esto., Tenga en cuenta que no necesita saber cómo usar clases o incluso definir funciones. Programar con retroalimentación visual rápida es ideal para cualquier persona que quiera comenzar a aprender a programar.

usando funciones

por supuesto, escribir código en el contexto global no es una buena forma. Afortunadamente, mejorar su programa mediante el uso de funciones es fácil. Aquí podemos ver un ejemplo de un dibujo de un pino en una ubicación específica (x, y) usando una función:

para el ejemplo completo, vea dibujo con funciones.,

el programador más experimentado sabrá que los programas gráficos modernos primero cargan información de dibujo en la tarjeta gráfica, y luego le piden a la tarjeta gráfica que la dibuje más tarde como un lote. Arcade también soporta esto. Dibujar 10,000 rectángulos individualmente toma aproximadamente 0.800 segundos. Dibujarlos como un lote toma menos de 0.001 segundos.

La Clase Window

los programas más grandes normalmente derivarán de la clase Window, o usarán decoradores. Esto permite a un programador escribir código para manejar el dibujo, la actualización y el manejo de la entrada del usuario., A continuación se muestra una plantilla para iniciar un programa basado en Window.

la clase Window tiene varios métodos que sus programas pueden anular para proporcionar funcionalidad al programa. Aquí están algunos de los más comúnmente usados:

  • on_draw: Todo el código para dibujar la pantalla va aquí.
  • update: Todo el código para mover sus elementos y realizar la lógica del juego va aquí. Esto se llama aproximadamente 60 veces por segundo.,
  • on_key_press: controla los eventos cuando se pulsa una tecla, como dar una velocidad a un reproductor.
  • on_key_release: manejar cuando se libera una clave, aquí puede evitar que un reproductor se mueva.
  • on_mouse_motion : esto se llama cada vez que el ratón se mueve.
  • on_mouse_press: se llama cuando se pulsa un botón del ratón.
  • set_viewport : esta función se utiliza en juegos de desplazamiento, cuando tienes un mundo mucho más grande que lo que se puede ver en una pantalla., Llamar a set_viewport permite a un programador establecer qué parte de ese mundo es visible actualmente.

Sprites

Sprites son una forma fácil de crear un objeto de mapa de bits 2D en Arcade. Arcade tiene métodos que facilitan dibujar, mover y animar sprites. También puede usar sprites fácilmente para detectar colisiones entre objetos.

crear un sprite

crear una instancia de la clase Sprite de Arcade a partir de un gráfico es fácil. Un programador solo necesita el nombre de archivo de una imagen para basar el sprite, y opcionalmente un número para escalar la imagen hacia arriba o hacia abajo., Por ejemplo:

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

Este código creará un sprite usando la imagen almacenada en el coin_01.png. La imagen se reducirá al 20% de su altura y anchura originales.

listas de Sprites

los Sprites normalmente están organizados en listas. Estas listas facilitan la gestión de los sprites. Los Sprites en una lista usarán OpenGL para dibujar por lotes los sprites como un grupo. El siguiente código establece un juego con un jugador, y un montón de monedas para que el jugador recoja. Usamos dos listas, una para el Jugador y otra para las monedas.,

podemos dibujar fácilmente todas las monedas en las listas de monedas:

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

detectando colisiones de Sprites

la función check_for_collision_with_list nos permite ver si un sprite se encuentra con otro sprite en una lista. Podemos usar esto para ver todas las monedas con las que el sprite del jugador está en contacto. Usando un simple bucle for, podemos deshacernos de la moneda del juego y aumentar nuestra puntuación.

para ver el ejemplo completo, consulte collect_coins.py.

Game physics

muchos juegos incluyen algún tipo de física., Los más simples son los programas de arriba hacia abajo que evitan que el jugador camine a través de las paredes. Los plataformas añaden más complejidad con la gravedad y las plataformas que se mueven. Algunos juegos utilizan un motor de física 2D completo con masa, fricción, resortes y más.

juegos de arriba hacia abajo

para juegos simples de arriba hacia abajo, un programa de Arcade necesita una lista de paredes que el jugador (o cualquier otra cosa) no puede mover a través. Normalmente llamo a esto wall_list., Luego se crea un motor de física en el código de configuración de la clase Window con:

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

el player_sprite recibe un vector de movimiento con sus dos atributos change_x y change_y. Un ejemplo simple de hacer esto sería hacer que el jugador se mueva con el teclado. Por ejemplo, esto podría estar en el hijo personalizado de Window class:

Aunque ese código establece la velocidad del reproductor, no lo mueve., En el método update de la clase Window, llamar a physics_engine.update() moverá el reproductor, pero no a través de paredes.

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

para ver un ejemplo completo, consulte sprite_move_walls.py.

plataformas

moverse a un juego de plataformas de vista lateral es bastante fácil. Un programador solo necesita cambiar el motor de física a PhysicsEnginePlatformer y agregar la constante de gravedad.

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

puede usar un programa como Tiled para colocar los mosaicos / bloques que componen su nivel.

para un ejemplo, vea sprite_tiled_map.,py.

para física completa en 2D puede integrar la biblioteca PyMunk.

aprende con el ejemplo

Una de las mejores maneras de aprender es con el ejemplo. La Biblioteca Arcade tiene una larga lista de programas de ejemplo que una persona puede utilizar para crear juegos. Cada uno de estos ejemplos muestra un concepto de juego que los estudiantes han pedido en mis clases o en línea a lo largo de los años.

ejecutar cualquiera de estas demostraciones es fácil una vez que se ha instalado Arcade., Cada uno de los ejemplos tiene un comentario al principio del programa con un comando que puede escribir en la línea de comandos para ejecutar el ejemplo, por ejemplo:

python -m arcade.examples.sprite_moving_platforms

Summary

Arcade le permite comenzar a programar gráficos y juegos con código fácil de entender. Muchos programadores nuevos han creado grandes juegos no mucho después de empezar. ¡Inténtalo!

para obtener más información, asiste a la charla de Paul Vincent Craven, Easy 2D Game Creation With Arcade, en PyCon Cleveland 2018.

Share

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *