En numerosas ocasiones necesitamos lanzar objetos a lo largo de nuestra ventanan del juego. Es fácil hacerlo en línea recta, pero ¿Cómo hacerlo en diagonal?
Primero vamos a definir una clase y le pasaremos una variable ejex, ejey.
import pygame
pygame.init()
class Flecha(pygame.sprite.Sprite):
def __init__(self):
super().__init__()
self.image = pygame.image.load("E:/NUEVO 2020/PYTHON/pygame/Anima2/bola2.png").convert_alpha()
self.rect=self.image.get_rect()
def update(self):
self.rect.x +=self.ejex
self.rect.y +=self.ejey
Definimos una lista de sprite, la ventana con fondo y abrimos el bucle.
ancho = 1200
alto = 700
flechaLista=pygame.sprite.Group()
#----------------Ventana y título---------------------
ventana = pygame.display.set_mode((ancho,alto))
pygame.display.set_caption('Tirabolas')
clock=pygame.time.Clock()
pygame.mouse.set_visible(1) #Oculto el puntero en 0
fondo =pygame.image.load("E:/NUEVO 2020/PYTHON/pygame/Fondo/bosque.png").convert()
#/////////////////Bucle del juego/////////////////
gameOver=False
while not gameOver:
clock.tick(60)
for event in pygame.event.get():
if event.type == pygame.QUIT:
gameOver=True
Ahora calculamos la trayectoria con una formula a partir de la posición del puntero.
if event.type == pygame.MOUSEBUTTONDOWN:
a,b = pygame.mouse.get_pos()
rx=(a-600)/100
ry=(b-600)/100
Damos valores a las variables, añadimos estos valores a la lista y cargamos la clase con esos valores.
flecha=Flecha()
flecha.ejex=rx
flecha.ejey=ry
flecha.rect.x=600
flecha.rect.y=600
flechaLista.add(flecha)
#------------ LOGICA -------------------
flechaLista.update()
Por último dibujamos el fondo y la lista.
#-------------FONDO---------------------
ventana.blit(fondo, [0,0])
#------------ DIBUJO ------------------
flechaLista.draw(ventana)
pygame.display.flip()
pygame.quit()
Juande Marín
Profesor de Marketing digital, divulgador de inteligencia artificial y neuroeducación. Especializado en posicionamiento en buscadores y diseño web. Autor de varios libros relacionados con el comercio electrónico y el marketing digital (McGraw Hill, Paraninfo,…) Juande2marin