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