Pygame – Animación de personajes

PyGame es una biblioteca de python de código abierto y gratuito que se utiliza para diseñar videojuegos. En este artículo, aprenderemos cómo podemos agregar diferentes animaciones a nuestros personajes.

Animación sencilla

Podemos agregar fácilmente animaciones simples en nuestros proyectos de pygame siguiendo los pasos a continuación.

  • Crear una lista de sprites
  • Iterar sobre la lista
  • Mostrar el sprite en la pantalla

A continuación se muestra la implementación:

Python3

# Importing the pygame module
import pygame
from pygame.locals import *
 
# Initiate pygame and give permission
# to use pygame's functionality
pygame.init()
 
# Create a display surface object
# of specific dimension
window = pygame.display.set_mode((600, 600))
 
 
# Create a list of different sprites
# that you want to use in the animation
image_sprite = [pygame.image.load("Sprite1.png"),
                pygame.image.load("Sprite2.png")]
 
 
# Creating a new clock object to
# track the amount of time
clock = pygame.time.Clock()
 
# Creating a new variable
# We will use this variable to
# iterate over the sprite list
value = 0
 
# Creating a boolean variable that
# we will use to run the while loop
run = True
 
# Creating an infinite loop
# to run our game
while run:
 
    # Setting the framerate to 3fps just
    # to see the result properly
    clock.tick(3)
 
    # Setting 0 in value variable if its
    # value is greater than the length
    # of our sprite list
    if value >= len(image_sprite):
        value = 0
 
    # Storing the sprite image in an
    # image variable
    image = image_sprite[value]
 
    # Creating a variable to store the starting
    # x and y coordinate
    x = 150
 
    # Changing the y coordinate
    # according the value stored
    # in our value variable
    if value == 0:
        y = 200
    else:
        y = 265
 
    # Displaying the image in our game window
    window.blit(image, (x, y))
 
    # Updating the display surface
    pygame.display.update()
 
    # Filling the window with black color
    window.fill((0, 0, 0))
 
    # Increasing the value of value variable by 1
    # after every iteration
    value += 1

Producción:

Explicación:

  • Crear un objeto de superficie de visualización de una dimensión específica
  • Luego cree una lista de diferentes sprites que desea usar en la animación y luego cree un nuevo objeto de reloj para rastrear la cantidad de tiempo.
  • Cree una variable booleana que usaremos para ejecutar el ciclo while y luego cree un ciclo infinito para ejecutar nuestro juego. Establecer la velocidad de fotogramas en 3 fps solo para ver el resultado correctamente. Establezca 0 en la variable de valor si su valor es mayor que la longitud de nuestra lista de sprites.
  • Almacene la imagen del sprite en una variable de imagen y luego cree una variable para almacenar las coordenadas x e y iniciales. Cambie la coordenada y según el valor almacenado en nuestra variable de valor.
  • Luego muestre la imagen en nuestra ventana de juego y actualice la superficie de visualización, y llene la ventana con color negro.

Animación en movimiento

Si solo desea mostrar la animación cuando su personaje se está moviendo o cuando un usuario presiona un botón específico, puede hacerlo siguiendo estos pasos:

  • Crea una variable para comprobar si el personaje se mueve o no.
  • Crear una lista de sprites
  • Si el personaje se está moviendo, repita la lista de sprites y muestre los sprites en la pantalla.
  • Si el personaje no se mueve, muestra el sprite almacenado en el índice 0 de la lista.

Imágenes utilizadas:

A continuación se muestra la implementación:

Python3

# Importing the pygame module
import pygame
from pygame.locals import *
 
# Initiate pygame and give permission
# to use pygame's functionality
pygame.init()
 
# Create a display surface object
# of specific dimension
window = pygame.display.set_mode((600, 600))
 
 
# Create a list of different sprites
# that you want to use in the animation
image_sprite = [pygame.image.load("Sprite1.png"),
                pygame.image.load("Sprite2.png"),
                pygame.image.load("Sprite3.png"),
                pygame.image.load("Sprite4.png")]
 
 
# Creating a new clock object to
# track the amount of time
clock = pygame.time.Clock()
 
# Creating a new variable
# We will use this variable to
# iterate over the sprite list
value = 0
 
# Creating a boolean variable that
# we will use to run the while loop
run = True
 
# Creating a boolean variable to
# check if the character is moving
# or not
moving = False
 
# Creating a variable to store
# the velocity
velocity = 12
 
# Starting coordinates of the sprite
x = 100
y = 150
 
# Creating an infinite loop
# to run our game
while run:
 
    # Setting the framerate to 10fps just
    # to see the result properly
    clock.tick(10)
 
    # iterate over the list of Event objects
    # that was returned by pygame.event.get() method.
    for event in pygame.event.get():
 
        # Closing the window and program if the
        # type of the event is QUIT
        if event.type == pygame.QUIT:
            run = False
            pygame.quit()
            quit()
 
        # Checking event key if the type
        # of the event is KEYUP i.e.
        # keyboard button is released
        if event.type == pygame.KEYUP:
 
            # Setting the value of moving to False
            # and the value f value variable to 0
            # if the button released is
            # Left arrow key or right arrow key
            if event.key == pygame.K_LEFT or event.key == pygame.K_RIGHT:
                moving = False
                value = 0
 
    # Storing the key pressed in a
    # new variable using key.get_pressed()
    # method
    key_pressed_is = pygame.key.get_pressed()
 
    # Changing the x coordinate
    # of the player and setting moving
    # variable to True
    if key_pressed_is[K_LEFT]:
        x -= 8
        moving = True
    if key_pressed_is[K_RIGHT]:
        x += 8
        moving = True
 
    # If moving variable is True
    # then increasing the value of
    # value variable by 1
    if moving:
        value += 1
 
    # Setting 0 in value variable if its
    # value is greater than the length
    # of our sprite list
    if value >= len(image_sprite):
        value = 0
 
    # Storing the sprite image in an
    # image variable
    image = image_sprite[value]
 
    # Scaling the image
    image = pygame.transform.scale(image, (180, 180))
 
    # Displaying the image in our game window
    window.blit(image, (x, y))
 
    # Updating the display surface
    pygame.display.update()
 
    # Filling the window with black color
    window.fill((0, 0, 0))

Producción:

Explicación:

  • Cree un objeto de superficie de visualización de una dimensión específica y luego cree una lista de diferentes sprites que desea usar en la animación.
  • Cree un nuevo objeto de reloj para realizar un seguimiento de la cantidad de tiempo y cree una nueva variable. Usaremos esta variable para iterar sobre la lista de sprites. Cree una variable booleana que usaremos para ejecutar el ciclo while y cree una variable booleana para verificar si el personaje se está moviendo o no, cree una variable para almacenar las coordenadas iniciales de velocidad del sprite y cree un ciclo infinito para ejecutar nuestro juego y establezca la velocidad de fotogramas en 10 fps solo para ver el resultado correctamente, repita la lista de objetos de evento que devolvió el método pygame.event.get(). Cierra la ventana y programa si el tipo de evento es SALIR.
  • Comprobación de la tecla de evento si el tipo de evento es KEYUP, es decir, se suelta el botón del teclado y establece el valor de movimiento en Falso y el valor de la variable de valor pf en 0 si el botón liberado es la tecla de flecha izquierda o la tecla de flecha derecha.
  • Almacene la tecla presionada en una nueva variable usando el método key.get_pressed(). Cambie la coordenada x del jugador y establezca la variable móvil en Verdadero. Si la variable móvil es Verdadera, entonces aumenta el valor de la variable de valor en 1. Establezca 0 en la variable de valor si su valor es mayor que la longitud de nuestra lista de sprites. Guarde la imagen del sprite en una variable de imagen y luego escale la imagen

Publicación traducida automáticamente

Artículo escrito por imranalam21510 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

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