"Si un trabajador quiere hacer bien su trabajo, primero debe afilar sus herramientas." - Confucio, "Las Analectas de Confucio. Lu Linggong"
Página delantera > Programación > ¿Cómo disparar una bala en la dirección del mouse en Pygame?

¿Cómo disparar una bala en la dirección del mouse en Pygame?

Publicado el 2024-11-07
Navegar:229

How to shoot a bullet in the direction of the mouse in Pygame?

Cómo disparar una bala en la dirección del mouse en Pygame

En Pygame, uno puede crear una bala que se dispara en la dirección del mouse. Para hacer esto, sería necesario crear una clase que represente la viñeta y establecer su posición inicial y dirección según la posición del mouse.

Clase para la viñeta

Primero, crea una clase para la bala. Esta clase debe incluir atributos para la posición, el tamaño y la superficie de la bala. La superficie es lo que se representará en la pantalla.

import pygame

class Bullet:
    def __init__(self, x, y):
        self.x = x
        self.y = y
        self.height = 7
        self.width = 2
        self.bullet = pygame.Surface((self.width, self.height))
        self.bullet.fill((255, 255, 255))

Funciones de clase de juego

A continuación, crea una clase para el juego. Esta clase contendrá funciones para disparar y generar balas.

class Game:
    def __init__(self):
        self.bullets = []
    
    def shoot_bullet(self):
        mouse_x, mouse_y = pygame.mouse.get_pos() # Get the mouse position
        for bullet in self.bullets:
            rise = mouse_y - bullet.y # Calculate the difference between mouse and bullet y position
            run = mouse_x - bullet.x # Calculate the difference between mouse and bullet x position
            angle = math.atan2(rise, run) # Calculate the angle between mouse and bullet

            bullet.x  = math.cos(angle) * 10 # Update bullet x position
            bullet.y  = math.sin(angle) * 10 # Update bullet y position

            # Rotate and draw the bullet
            rotated_bullet = pygame.transform.rotate(bullet.bullet, -math.degrees(angle))
            screen.blit(rotated_bullet, (bullet.x, bullet.y))

    def generate_bullet(self):
        mouse_buttons = pygame.mouse.get_pressed() # Check if mouse is clicked
        if mouse_buttons[0]: # If left mouse button is clicked
            self.bullets.append(Bullet(player.x, player.y)) # Create a new bullet

Usando la clase Bullet

En el bucle principal del juego, cree una instancia de la clase Game y llame a las funciones shoot_bullet y generate_bullet.

game = Game()

while running:
    # Event handling

    # Update
    game.shoot_bullet()
    game.generate_bullet()
    
    # Draw
    screen.fill((0, 0, 0))
    for bullet in game.bullets:
        screen.blit(bullet.bullet, (bullet.x, bullet.y))
    pygame.display.update()

Este código creará una bala que se dispara en la dirección del mouse. La bala se moverá hasta salir de la pantalla.

Último tutorial Más>

Descargo de responsabilidad: Todos los recursos proporcionados provienen en parte de Internet. Si existe alguna infracción de sus derechos de autor u otros derechos e intereses, explique los motivos detallados y proporcione pruebas de los derechos de autor o derechos e intereses y luego envíelos al correo electrónico: [email protected]. Lo manejaremos por usted lo antes posible.

Copyright© 2022 湘ICP备2022001581号-3