es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

¿Cómo disparas una bala hacia un ratón en Pygame a una velocidad constante?

Estoy intentando disparar una bala hacia mi ratón en pygame, aquí está mi código:

import pygame
import math

pygame.init()

pantalla = pygame.display.set_mode((400, 400))

pygame.display.set_caption(“diep.io”)

pantalla.fill((255,255,255))

disparo_automatico = False

class Bala:
def init(self, x_movimiento, y_movimiento, x_loc, y_loc):
self.imagen = pygame.image.load(“Bullet.png”)
self.x_movimiento = x_movimiento
self.y_movimiento = y_movimiento
self.x_loc = x_loc
self.y_loc = y_loc
self.rectangulo_bala = self.imagen.get_rect()

def update(self):
self.rectangulo_bala.center = (self.x_loc + self.x_movimiento, self.y_loc + self.y_movimiento)
self.x_loc = self.rectangulo_bala.center[0]
self.y_loc = self.rectangulo_bala.center[1]
pantalla.blit(self.imagen, self.rectangulo_bala)

if self.x_loc > 400 or self.y_loc > 400:
  balas.remove(self)

bala = None
balas = []

while True:
pantalla.fill((255, 255, 255))
pygame.draw.rect(pantalla, (100, 100, 100), (205, 193, 25, 15))
pygame.draw.circle(pantalla, (82, 219, 255), (200, 200), 15)
for event in pygame.event.get():
if event.type == pygame.MOUSEBUTTONUP:
x = pygame.mouse.get_pos()[0] – 200
y = pygame.mouse.get_pos()[1] – 200
pitagoras = float(math.sqrt(x2 + y2))
balas.append(Bala(x/pitagoras, y/pitagoras, 200, 200))
for bala in balas:
bala.update()
pygame.display.update()
pygame.time.delay(10)

Estoy confundido en cómo hacer que esto funcione, creo que de alguna manera estoy redondeando algo, pero incluso después de poner float(), todavía no funciona. Además, antes cuando usaba las coordenadas del mouse, funcionaba, pero cuando estaba cerca del tanque, disparaba lentamente, y disparaba increíblemente rápido más lejos del tanque. Alguien por favor ayúdeme, gracias.

Tags:  ,

Answer

  1. Avatar for davy.ai

    Para disparar una bala hacia el ratón en pygame, necesitas ajustar el movimiento de la bala basado en la posición del ratón. Estos son los pasos para hacerlo:

    1. Obtener la posición del ratón usando pygame.mouse.get_pos().
    2. Calcular el ángulo entre la posición del ratón y el centro de la pantalla usando la función math.atan2().
    3. Convertir el ángulo a radianes usando la función math.radians().
    4. Calcular el movimiento x e y de la bala usando las funciones math.cos() y math.sin().
    5. Crear un nuevo objeto de Bala con los valores de movimiento x e y y agregarlo a la lista de balas.

    Aquí hay un fragmento de código actualizado con estos cambios:

    while True:
        screen.fill((255, 255, 255))
        pygame.draw.rect(screen, (100, 100, 100), (205, 193, 25, 15))
        pygame.draw.circle(screen, (82, 219, 255), (200, 200), 15)
        for event in pygame.event.get():
            if event.type == pygame.MOUSEBUTTONUP:
                mouse_pos = pygame.mouse.get_pos()
                dx = mouse_pos[0] - 200
                dy = mouse_pos[1] - 200
                angle = math.atan2(dy, dx)
                angle = math.degrees(angle)
                x_move = 5 * math.cos(math.radians(angle))
                y_move = 5 * math.sin(math.radians(angle))
                bullets.append(Bullet(x_move, y_move, 200, 200))
        for bullet in bullets:
            bullet.update()
        pygame.display.update()
        pygame.time.delay(10)
    

    Este código debería disparar la bala hacia la posición del ratón con una velocidad constante de 5. Nota que puedes ajustar la velocidad cambiando el valor de las variables de movimiento x e y.

Comments are closed.