Puedes animar el más simple de los juegos con partículas animadas. Simule movimiento, explosiones y más usando estas técnicas.

Pygame es una biblioteca popular para desarrollar juegos usando Python. Al crear juegos, agregar efectos especiales puede mejorar en gran medida el atractivo visual y la experiencia general de los jugadores.

Los sistemas de partículas son una técnica poderosa para crear efectos dinámicos y visualmente interesantes, como nubes de polvo, explosiones, niebla y más.

Crea un juego simple

Antes de sumergirse en los sistemas de partículas y las mejoras visuales, comience creando un juego simple usando Pygame. Crear un nuevo archivo llamado juego-simple.py y comience importando las bibliotecas necesarias e inicializando Pygame. Configure la ventana del juego con un ancho y alto especificados.

El código utilizado en este artículo está disponible en este repositorio GitHub y es gratis para su uso bajo la licencia MIT.

Dentro del ciclo principal del juego, maneje los eventos del usuario y actualice la posición del jugador en función de las pulsaciones de teclas.

instagram viewer
dibujar un rectángulo para el objeto jugador usando pygame.dibujar.rect().

Finalmente, actualice la ventana del juego usando pygame.display.flip() y abandona el juego cuando el jugador sale del bucle. Este sencillo juego servirá como base para agregar efectos especiales usando sistemas de partículas.

Debería ver un cuadrado blanco que representa al jugador que puede mover hacia la izquierda y hacia la derecha:

Creación de varios tipos de partículas

Ahora que ha configurado su juego simple, puede agregar diferentes sistemas de partículas. Cree clases de partículas para cada efecto y una clase de sistema de partículas para administrar y actualizar las partículas.

Efecto de partículas cuando el jugador se mueve

El primer efecto de partículas será un rastro de partículas de polvo emitidas desde la espalda del jugador cuando el jugador comienza a mover usando el mouse o la entrada del teclado. Además, la dirección de las partículas de polvo cambiará cuando el jugador cambie de dirección.

Definir un Partícula clase que representa una partícula individual. Cada partícula tiene una posición inicial (X y y), una velocidad aleatoria (dx y dy), y un tiempo de vida que determina cuánto tiempo existirá la partícula.

Asimismo, defina un Sístema de partículas clase que gestiona una colección de partículas. Puede agregar una nueva partícula al sistema usando el añadir_partícula() método. El actualizar() El método actualiza todas las partículas en el sistema y elimina las partículas que han llegado al final de su vida útil.

# Clase de partículas
clasePartícula:
definitivamente__en eso__(yo, x, y):
self.x = x
self.y = y
self.dx = aleatorio.uniforme(-1, 1)
self.dy = aleatorio.uniforme(-1, 1)
self.lifetime = 60

definitivamenteactualizar(ser):
self.x += self.dx
self.y += self.dy
self.lifetime -= 1

definitivamentedibujar(yo, ventana):
color = (200, 200, 200)
posición = (int (auto.x), int (auto.y))
pygame.draw.circle (ventana, color, posición, 2)

# Clase de sistema de partículas
claseSístema de partículas:
definitivamente__en eso__(ser):
self.partículas = []

definitivamenteañadir_partícula(yo, x, y):
self.particles.append (Partícula (x, y))

definitivamenteactualizar(ser):
para partícula en auto.partículas:
partícula.update()

si partícula.vida útil <= 0:
self.particles.remove (partícula)

definitivamentedibujar(yo, ventana):
para partícula en auto.partículas:
partícula.draw (ventana)

Para integrar el sistema de partículas en su juego, debe realizar algunas modificaciones en el bucle principal del juego. Crear un nuevo archivo llamado movimiento-partículas.py y agregue el código con las siguientes actualizaciones:

# Crear sistema de partículas
sistema_de_partículas = Sistema_de_partículas()

# Bucle de juego principal
corriendo = Verdadero
reloj = pygame.hora. Reloj()

mientras correr:
dt = reloj.tick(60) / 1000.0

para evento en pygame.event.get():
si evento.tipo == pygame. ABANDONAR:
corriendo = FALSO

partícula_y = jugador_y + jugador_altura // 2
partícula_x = jugador_x + jugador_ancho

llaves = pygame.key.get_pressed()
límite = player_x

si teclas[pygame. K_IZQUIERDA] y jugador_x > 0:
jugador_x -= 5
sistema_de_partículas.add_particle (partícula_x, partícula_y)

si teclas[pygame. K_DERECHO] y Perímetro:
jugador_x += 5
sistema_de_partículas.add_particle (jugador_x, partícula_y)

sistema_de_partículas.update()

ventana.llenar (NEGRO)
player_pos = (player_x, player_y, player_width, player_height)
pygame.draw.rect (ventana, BLANCO, player_pos)
sistema_de_partículas.dibujar (ventana)

pygame.display.flip()

# Salir del juego
pygame.quit()

Cuando muevas el objeto del jugador ahora, deberías ver partículas que enfatizan el movimiento:

Efecto Explosión

El próximo efecto de partículas será un efecto de explosión que ocurre cuando el jugador dispara una bala. El efecto de explosión consistirá en partículas de color rojo emitidas desde la posición de la bala.

Definir un Partícula clase similar a la anterior, pero esta vez incluye una color parámetro para representar el color de la partícula.

Además, actualice la Sístema de partículas clase para manejar el nuevo tipo de partícula. El añadir_partícula() método ahora toma un adicional color parámetro y crea partículas con el color especificado.

# Clase de partículas
clasePartícula:
definitivamente__en eso__(yo, x, y, color):
self.x = x
self.y = y
self.dx = aleatorio.uniforme(-2, 2)
self.dy = aleatorio.uniforme(-2, 2)
self.lifetime = 30
self.color = color

definitivamenteactualizar(ser):
self.x += self.dx
self.y += self.dy
self.lifetime -= 1

definitivamentedibujar(yo, ventana):
posición = (int (auto.x), int (auto.y))
pygame.draw.circle (ventana, self.color, position, 3)

# Clase de sistema de partículas
claseSístema de partículas:
definitivamente__en eso__(ser):
self.partículas = []

definitivamenteañadir_partícula(yo, x, y, color):
self.particles.append (Partícula (x, y, color)

definitivamenteactualizar(ser):
para partícula en auto.partículas:
partícula.update()

si partícula.vida útil <= 0:
self.particles.remove (partícula)

definitivamentedibujar(yo, ventana):
para partícula en auto.partículas:
partícula.draw (ventana)

Para integrar el efecto de explosión en su juego, debe realizar algunas modificaciones en el bucle principal del juego. Crear un nuevo nombre de archivo disparar-partículas.py y agregue el código con las siguientes actualizaciones:

# Crear sistema de partículas
sistema_de_partículas = Sistema_de_partículas()

# Bucle de juego principal
corriendo = Verdadero
reloj = pygame.hora. Reloj()

mientras correr:
dt = reloj.tick(60) / 1000.0

para evento en pygame.event.get():
si evento.tipo == pygame. ABANDONAR:
corriendo = FALSO

llaves = pygame.key.get_pressed()
límite = player_x

si teclas[pygame. K_IZQUIERDA] y jugador_x > 0:
jugador_x -= 5

si teclas[pygame. K_DERECHO] y Perímetro:
jugador_x += 5

si teclas[pygame. ESPACIO_K]:
bullet_x = player_x + player_width // 2
bala_y = jugador_y
sistema_de_partículas.añadir_partícula (bullet_x, bullet_y, RED)

sistema_de_partículas.update()

ventana.llenar (NEGRO)
player_pos = (player_x, player_y, player_width, player_height)
pygame.draw.rect (ventana, BLANCO, player_pos)
sistema_de_partículas.dibujar (ventana)

pygame.display.flip()

# Salir del juego
pygame.quit()

Aquí está la salida:

Cuando la barra espaciadora ( pygame. ESPACIO_K), agregue una partícula al sistema de partículas en la posición de la bala. Esto crea el efecto de explosión con partículas rojas.

Efecto de polvo

La mejora visual final que puede implementar es un efecto de fondo polvoriento. El efecto de polvo consistirá en pequeñas partículas grises que se mueven en un patrón circular, creando un fondo dinámico y polvoriento.

Actualizar el Partícula clase para incluir un ángulo y velocidad para cada partícula. El ángulo determina la dirección del movimiento y la velocidad controla qué tan rápido se mueven las partículas en su patrón circular. Modificar el actualizar() método para actualizar la posición de cada partícula en función de su ángulo y velocidad.

Además, actualice la Sístema de partículas class para manejar el nuevo comportamiento de las partículas. Las partículas ahora se mueven en un patrón circular dentro de la ventana del juego.

# Clase de partículas
clasePartícula:
definitivamente__en eso__(yo, x, y, radio):
self.x = x
self.y = y
self.radius = radio
self.ángulo = aleatorio.uniforme(0, 2 * matemáticas.pi)
self.velocidad = aleatorio.uniforme(0.5, 1.5)

definitivamenteactualizar(ser):
auto.ángulo += 0.02
self.x += math.cos (self.angle) * self.speed
self.y += math.sin (self.angle) * self.speed

si yo.x < 0:
self.x = ancho_ventana
elif self.x > ancho_ventana:
self.x = 0

si self.y < 0:
self.y = altura_ventana
elif self.y > altura_ventana:
self.y = 0

definitivamentedibujar(yo, ventana):
color = (128, 128, 128)
pos = (int (auto.x), int (auto.y))
radio = int (self.radius)
pygame.draw.circle (ventana, color, posición, radio)

# Clase de sistema de partículas
claseSístema de partículas:
definitivamente__en eso__(ser):
self.partículas = []

definitivamenteañadir_partícula(yo, x, y, radio):
self.particles.append (Partícula (x, y, radio))

definitivamenteactualizar(ser):
para partícula en auto.partículas:
partícula.update()

definitivamentedibujar(yo, ventana):
para partícula en auto.partículas:
partícula.draw (ventana)

Para integrar el efecto de polvo en su juego, debe realizar algunas modificaciones en el bucle principal del juego. Crear un nuevo archivo llamado partículas-de-polvo.py y agregue el código con las siguientes actualizaciones:

# Crear sistema de partículas para efecto de polvo.
sistema_de_partículas = Sistema_de_partículas()

# Bucle de juego principal
corriendo = Verdadero
reloj = pygame.hora. Reloj()

mientras correr:
dt = reloj.tick(60) / 1000.0

para evento en pygame.event.get():
si evento.tipo == pygame. ABANDONAR:
corriendo = FALSO

partícula_x = random.randint(0, ancho_ventana)
partícula_y = random.randint(0, altura_ventana)

sistema_de_partículas.add_particle (partícula_x, partícula_y, 1)

sistema_de_partículas.update()

ventana.llenar((0, 0, 0))
sistema_de_partículas.dibujar (ventana)

pygame.display.flip()

# Salir del juego
pygame.quit()

Agregue partículas aleatoriamente a través de la ventana del juego usando el aleatorio.randint() función. Cada partícula tiene un radio inicial de 1. Actualice y dibuje el sistema de partículas en la ventana del juego, creando un efecto de fondo dinámico y polvoriento.

Debería ver muchas partículas en la pantalla, moviéndose al azar pero sin problemas:

Mejores prácticas para efectos especiales

Al agregar efectos especiales a su juego de Pygame, considere las siguientes prácticas recomendadas:

Optimización del rendimiento

Los sistemas de partículas pueden involucrar una gran cantidad de partículas, lo que puede afectar el rendimiento del juego. Implemente técnicas como la partición espacial (p. ej., Quadtree) para optimizar las actualizaciones y el dibujo de partículas.

Reciclaje de Partículas

En lugar de crear y destruir partículas en cada cuadro, considere reutilizar partículas restableciendo sus propiedades cuando lleguen al final de su vida útil. Esto ayuda a minimizar la asignación y desasignación de memoria.

Agrupación de partículas

Mantenga un grupo de partículas preasignadas para evitar la sobrecarga de crear nuevas instancias durante el tiempo de ejecución. Esto puede mejorar el rendimiento y reducir la fragmentación de la memoria.

Límite de conteo de partículas

Para evitar que los sistemas de partículas abrumen la pantalla del juego, establezca límites en la cantidad máxima de partículas y elimínelas cuando alcancen este límite. Esto asegura que los efectos sigan siendo visualmente atractivos sin obstaculizar el juego.

Consistencia visual

Mantén un estilo visual uniforme durante todo el juego, incluidos los efectos de partículas. Asegúrese de que los colores, tamaños y patrones de movimiento de las partículas sean coherentes con el tema general y el estilo artístico.

Efectos de sonido

Agregar efectos de sonido para complementar sus efectos de partículas. Por ejemplo, reproduzca sonidos de explosión cuando se produzca un efecto de explosión o sonidos ambientales cuando los efectos de niebla o polvo estén activos.

Haz que los juegos sean más divertidos con efectos especiales

Agregar efectos especiales, como sistemas de partículas, a sus juegos de Pygame puede mejorar enormemente la experiencia del jugador y hacer que sus juegos sean más atractivos y divertidos para los jugadores. Al implementar efectos de partículas como estelas, explosiones, niebla y polvo, puede crear entornos visualmente impresionantes y dinámicos.

Recuerde considerar la optimización del rendimiento, el reciclaje de partículas y la consistencia visual al incorporar efectos especiales en sus juegos. Con creatividad y experimentación, puede llevar sus juegos de Pygame al siguiente nivel y cautivar a los jugadores con experiencias inmersivas y emocionantes.