Pygame – Controlar Sprites

En este artículo, discutiremos cómo controlar el sprite, como avanzar, retroceder, ralentizar o acelerar, y algunas de las propiedades que debe tener el sprite. Agregaremos controladores de eventos a nuestro programa para responder a los eventos de pulsación de teclas, cuando el jugador use las teclas de flecha en el teclado llamaremos a nuestros métodos puros para mover el objeto en la pantalla.

Funciones utilizadas

  • moveRight(): este método toma píxeles de argumento, lo que significa cuántos píxeles se debe mover un objeto en la dirección correcta. Básicamente está agregando píxeles a la coordenada x actual del objeto.
  • moveLeft(): este método toma píxeles de argumento, lo que significa cuántos píxeles se debe mover un objeto en la dirección izquierda. Básicamente está restando píxeles a la coordenada x actual del objeto.
  • moveForward(): este método toma una velocidad de argumento, lo que significa por cuántos factores aumentará la velocidad. Básicamente está aumentando la velocidad con el factor de n en la dirección y del objeto.
  • moveBackward(): Este método toma un argumento velocidad, lo que significa por cuántos factores disminuirá la velocidad . Básicamente es una velocidad decreciente con el factor de n en la dirección y del objeto.

Veamos primero la implementación de una clase Sprite, que nos ayuda a crear un objeto en nuestra superficie PyGame, y junto con 4 métodos agregados que nos ayudarán a avanzar, retroceder, derecha e izquierda.

Ejemplo: clase de Sprite

Python3

import pygame
 
# GLOBAL VARIABLES
COLOR = (255, 100, 98)
SURFACE_COLOR = (167, 255, 100)
WIDTH = 500
HEIGHT = 500
 
# Object class
class Sprite(pygame.sprite.Sprite):
    def __init__(self, color, height, width):
        super().__init__()
 
        self.image = pygame.Surface([width, height])
        self.image.fill(SURFACE_COLOR)
        self.image.set_colorkey(COLOR)
 
        pygame.draw.rect(self.image,
                         color,
                         pygame.Rect(0, 0, width, height))
 
        self.rect = self.image.get_rect()
 
    def moveRight(self, pixels):
        self.rect.x += pixels
 
    def moveLeft(self, pixels):
        self.rect.x -= pixels
 
    def moveForward(self, speed):
        self.rect.y += speed * speed/10
 
    def moveBack(self, speed):
        self.rect.y -= speed * speed/10

Ahora veremos cómo tenemos el control de nuestro ciclo de programa principal para manejar los sprites. La primera parte del ciclo responderá a eventos como interacciones cuando el usuario usa el mouse o el teclado. Más tarde, se ocupará de los métodos anteriores para el manejo de eventos en nuestro objeto. Cada controlador de eventos llamará al método relevante de la clase Sprite.

En este fragmento de código, tenemos el control de nuestro objeto, es decir, nuestro objeto es un objeto según nuestras direcciones dadas, si presionamos la tecla de flecha derecha, se moverá en esa dirección y lo mismo con todas las teclas de flecha. Aquí, usamos el método pygame.KEYDOWN para inicializar el método para usar las teclas de flecha para controlar los objetos, luego, tenemos que controlar el método respectivo para activar la tecla específica para realizar la acción determinada.

Por ejemplo, si tenemos una tecla de flecha hacia la derecha, debemos llamar al método pygame.K_RIGHT para movernos hacia la derecha en la dirección del objeto, y similar para el método pygame.K_DOWN que se usa para movernos hacia arriba en la dirección del objeto. .

Ejemplo: Sprite controlador 

Python3

import random
import pygame
 
# Global Variables
COLOR = (255, 100, 98)
SURFACE_COLOR = (167, 255, 100)
WIDTH = 500
HEIGHT = 500
 
# Object class
class Sprite(pygame.sprite.Sprite):
    def __init__(self, color, height, width):
        super().__init__()
 
        self.image = pygame.Surface([width, height])
        self.image.fill(SURFACE_COLOR)
        self.image.set_colorkey(COLOR)
 
        pygame.draw.rect(self.image,
                         color,
                         pygame.Rect(0, 0, width, height))
 
        self.rect = self.image.get_rect()
 
    def moveRight(self, pixels):
        self.rect.x += pixels
 
    def moveLeft(self, pixels):
        self.rect.x -= pixels
 
    def moveForward(self, speed):
        self.rect.y += speed * speed/10
 
    def moveBack(self, speed):
        self.rect.y -= speed * speed/10
 
 
pygame.init()
 
 
RED = (255, 0, 0)
 
 
size = (WIDTH, HEIGHT)
screen = pygame.display.set_mode(size)
pygame.display.set_caption("Creating Sprite")
 
 
all_sprites_list = pygame.sprite.Group()
 
playerCar = Sprite(RED, 20, 30)
playerCar.rect.x = 200
playerCar.rect.y = 300
 
 
all_sprites_list.add(playerCar)
 
exit = True
clock = pygame.time.Clock()
 
while exit:
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            exit = False
        elif event.type == pygame.KEYDOWN:
            if event.key == pygame.K_x:
                exit = False
 
    keys = pygame.key.get_pressed()
    if keys[pygame.K_LEFT]:
        playerCar.moveLeft(10)
    if keys[pygame.K_RIGHT]:
        playerCar.moveRight(10)
    if keys[pygame.K_DOWN]:
        playerCar.moveForward(10)
    if keys[pygame.K_UP]:
        playerCar.moveBack(10)
 
    all_sprites_list.update()
    screen.fill(SURFACE_COLOR)
    all_sprites_list.draw(screen)
    pygame.display.flip()
    clock.tick(60)
 
pygame.quit()

Producción:

Publicación traducida automáticamente

Artículo escrito por dev247kumar 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 *