Cómo mover tu personaje de juego en Pygame

Prerrequisitos: Pygame

Pygame es un conjunto multiplataforma de módulos Python diseñados para escribir videojuegos. Incluye gráficos por computadora y bibliotecas de sonido diseñadas para usarse con el lenguaje de programación Python. Puede crear diferentes tipos de juegos usando pygame, incluidos juegos de arcade, juegos de plataformas y muchos más.

Imágenes en uso:

Puedes controlar el movimiento de tu jugador. Para esto, primero cree un objeto de superficie de visualización usando el método display.set_mode() de pygame y agregue el sprite del jugador usando el método image.load() de pygame. La función set_mode() se utiliza para inicializar una superficie o ventana de visualización. El argumento de tamaño es un par de números que representan el ancho y el alto. El argumento flags es una colección de opciones adicionales. El argumento de profundidad representa el número de bits a utilizar para el color.

Sintaxis:

set_mode(tamaño=(0, 0), banderas=0, profundidad=0, pantalla=0, vsync=0) 

Crea una variable para almacenar la velocidad del jugador. Establece las coordenadas iniciales del jugador. Ahora, cambie las coordenadas x e y del reproductor de acuerdo con los eventos del teclado, es decir, eventos que ocurren cuando cambia el estado de la tecla.

La función blit (superficie, superficie recta) se utiliza para dibujar las imágenes en la pantalla.

Sintaxis:

blit(superficie, superficierect)

Para recopilar todos los eventos de la cola se usa la función get() del módulo de eventos, luego estamos iterando sobre todos los eventos usando un bucle for.

Sintaxis:

obtener (tipo de evento = ninguno)

Actualización de la pantalla mediante la función actualizar() del módulo de visualización.

Sintaxis:

actualizar (rectángulo = ninguno)

A continuación se muestra la implementación.

Ejemplo: Programa para movimiento de jugadores

Python3

# Importing pygame module
import pygame
from pygame.locals import *
  
# initiate pygame and give permission
# to use pygame's functionality.
pygame.init()
  
# create the display surface object
# of specific dimension.
window = pygame.display.set_mode((600, 600))
  
# Add caption in the window
pygame.display.set_caption('Player Movement')
  
# Add player sprite
image = pygame.image.load(r'Player_image.png')
  
  
# Store the initial
# coordinates of the player in
# two variables i.e. x and y.
x = 100
y = 100
  
# Create a variable to store the
# velocity of player's movement
velocity = 12
  
# Creating an Infinite loop
run = True
while run:
  
    # Filling the background with
    # white color
    window.fill((255, 255, 255))
  
    # Display the player sprite at x
    # and y coordinates
    window.blit(image, (x, y))
  
    # 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 KEYDOWN i.e.
        # keyboard button is pressed
        if event.type == pygame.KEYDOWN:
  
            # Decreasing the x coordinate
            # if the button pressed is
            # Left arrow key
            if event.key == pygame.K_LEFT:
                x -= velocity
  
            # Increasing the x coordinate
            # if the button pressed is
            # Right arrow key
            if event.key == pygame.K_RIGHT:
                x += velocity
  
            # Decreasing the y coordinate
            # if the button pressed is
            # Up arrow key
            if event.key == pygame.K_UP:
                y -= velocity
  
            # Increasing the y coordinate
            # if the button pressed is
            # Down arrow key
            if event.key == pygame.K_DOWN:
                y += velocity
  
        # Draws the surface object to the screen.
        pygame.display.update()

Producción:

El jugador también se puede mover en un movimiento continuo. Para esto, todo lo demás permanece igual, excepto que se deben realizar algunos cambios. Aquí estamos creando un nuevo objeto de reloj para controlar la velocidad de fotogramas del juego usando clock().

Sintaxis:

Reloj()

Se crea una nueva variable (llamada key_pressed_is) para almacenar la tecla presionada por el usuario. Para esto, estamos usando la función get_pressed() del módulo de teclas.

Sintaxis:

obtener_presionado()

Devuelve una secuencia de valores booleanos que representan el estado de cada tecla del teclado.

Ejemplo: Mover jugadores en movimiento continuo

Python3

# Importing pygame module
import pygame
from pygame.locals import *
  
# initiate pygame and give permission
# to use pygame's functionality.
pygame.init()
  
# create the display surface object
# of specific dimension.
window = pygame.display.set_mode((600, 600))
  
# Add caption in the window
pygame.display.set_caption('Player Movement')
  
# Initializing the clock
# Clocks are used to track and
# control the frame-rate of a game
clock = pygame.time.Clock()
  
# Add player sprite
image = pygame.image.load(r'Player_image.png')
  
  
# Store the initial
# coordinates of the player in
# two variables i.e. x and y.
x = 100
y = 100
  
# Create a variable to store the
# velocity of player's movement
velocity = 12
  
# Creating an Infinite loop
run = True
while run:
  
    # Set the frame rates to 60 fps
    clock.tick(60)
  
    # Filling the background with
    # white color
    window.fill((255, 255, 255))
  
    # Display the player sprite at x
    # and y coordinates
    window.blit(image, (x, y))
  
    # 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()
  
    # Storing the key pressed in a
    # new variable using key.get_pressed()
    # method
    key_pressed_is = pygame.key.get_pressed()
  
    # Changing the coordinates
    # of the player
    if key_pressed_is[K_LEFT]:
        x -= 8
    if key_pressed_is[K_RIGHT]:
        x += 8
    if key_pressed_is[K_UP]:
        y -= 8
    if key_pressed_is[K_DOWN]:
        y += 8
  
    # Draws the surface object to the screen.
    pygame.display.update()

Producción:

Voltear el sprite del jugador

Puede voltear fácilmente cualquier sprite usando la función flip() del módulo de transformación del pygame. Por ejemplo, si queremos voltear el sprite cada vez que el jugador cambia la dirección del movimiento, podemos usar la siguiente línea 

ventana.blit(pygame.transform.flip(imagen, Falso, Verdadero), (x,y))

flip() fsed para voltear el objeto de superficie horizontalmente, verticalmente. o ambos. Esta función tiene tres parámetros:

  • Imagen para voltear
  • Valor booleano para hacer un giro horizontal
  • Valor booleano para hacer un giro vertical

A continuación se muestra la implementación.

Ejemplo: voltear la imagen del jugador

Python3

# Importing pygame module
import pygame
from pygame.locals import *
  
# initiate pygame and give permission
# to use pygame's functionality.
pygame.init()
  
# create the display surface object
# of specific dimension.
window = pygame.display.set_mode((600, 600))
  
# Add caption in the window
pygame.display.set_caption('Player Movement')
  
# Initializing the clock
# Clocks are used to track and
# control the frame-rate of a game
clock = pygame.time.Clock()
  
# creating a variable to check the direction
# of movement
# We will change its value whenever
# the player changes its direction
direction = True
  
  
# Add player sprite
image = pygame.image.load(r'Player_image.png')
  
  
# Store the initial
# coordinates of the player in
# two variables i.e. x and y.
x = 100
y = 100
  
# Create a variable to store the
# velocity of player's movement
velocity = 12
  
# Creating an Infinite loop
run = True
while run:
  
    # Set the frame rates to 60 fps
    clock.tick(60)
  
    # Filling the background with
    # white color
    window.fill((255, 255, 255))
  
    # Display the player sprite at x
    # and y coordinates
    # Flipping the player sprite if player
    # changes the direction
    if direction == True:
        window.blit(image, (x, y))
    if direction == False:
        window.blit(pygame.transform.flip(image, True, False), (x, y))
  
    # 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()
  
        # Changing the value of the
        # direction variable
        if event.type == pygame.KEYDOWN:
            if event.key == pygame.K_RIGHT:
                direction = True
            elif event.key == pygame.K_LEFT:
                direction = False
  
    # Storing the key pressed in a
    # new variable using key.get_pressed()
    # method
    key_pressed_is = pygame.key.get_pressed()
  
    # Changing the coordinates
    # of the player
    if key_pressed_is[K_LEFT]:
        x -= 5
    if key_pressed_is[K_RIGHT]:
        x += 5
    if key_pressed_is[K_UP]:
        y -= 5
    if key_pressed_is[K_DOWN]:
        y += 5
  
    # Draws the surface object to the screen.
    pygame.display.update()

Producción:

También podemos actualizar fácilmente el sprite del jugador creando una lista de sprites.

imagen = [pygame.image.load(r’Player_image1.png’),

         pygame.image.load(r’Player_image2.png’)]

Ejemplo: Actualización de sprites

Python3

# Importing pygame module
import pygame
from pygame.locals import *
  
# initiate pygame and give permission
# to use pygame's functionality.
pygame.init()
  
# create the display surface object
# of specific dimension.
window = pygame.display.set_mode((600, 600))
  
# Add caption in the window
pygame.display.set_caption('Player Movement')
  
# Initializing the clock
# Clocks are used to track and
# control the frame-rate of a game
clock = pygame.time.Clock()
  
# creating a variable to check the direction
# of movement
# We will change its value whenever
# the player changes its direction
direction = True
  
  
# Add player sprites in a list
image = [pygame.image.load(r'Player_image1.png'),
         pygame.image.load(r'Player_image2.png')]
  
  
# Store the initial
# coordinates of the player in
# two variables i.e. x and y.
x = 100
y = 100
  
# Create a variable to store the
# velocity of player's movement
velocity = 12
  
# Creating an Infinite loop
run = True
while run:
  
    # Set the frame rates to 60 fps
    clock.tick(60)
  
    # Filling the background with
    # white color
    window.fill((255, 255, 255))
  
    # Display the player sprite at x
    # and y coordinates
    # Changing the player sprite if player
    # changes the direction
    if direction == True:
        window.blit(image[0], (x, y))
    if direction == False:
        window.blit(image[1], (x, y))
  
    # 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()
  
        # Changing the value of the
        # direction variable
        if event.type == pygame.KEYDOWN:
            if event.key == pygame.K_RIGHT:
                direction = True
            elif event.key == pygame.K_LEFT:
                direction = False
  
    # Storing the key pressed in a
    # new variable using key.get_pressed()
    # method
    key_pressed_is = pygame.key.get_pressed()
  
    # Changing the coordinates
    # of the player
    if key_pressed_is[K_LEFT]:
        x -= 5
    if key_pressed_is[K_RIGHT]:
        x += 5
    if key_pressed_is[K_UP]:
        y -= 5
    if key_pressed_is[K_DOWN]:
        y += 5
  
    # Draws the surface object to the screen.
    pygame.display.update()

Producción:

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 *