Mover en ángulo pygame

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

Material didáctico

Descubre un material moderno y adaptado a ciclos formativos.