Maison  >  Article  >  développement back-end  >  Comment faire tirer des balles vers le curseur de la souris dans PyGame ?

Comment faire tirer des balles vers le curseur de la souris dans PyGame ?

Barbara Streisand
Barbara Streisandoriginal
2024-11-02 08:49:02275parcourir

How to Make Bullets Shoot Towards the Mouse Cursor in PyGame?

Comment tirer une balle vers le curseur de la souris dans PyGame ?

Vous rencontrez des problèmes pour faire tirer votre balle vers le curseur de la souris dans PyGame. Votre code implique actuellement la création d'une classe Bullet, l'ajout de puces et le calcul de l'angle. Cependant, vous constatez que les balles ne tournent pas et ne bougent pas comme prévu. Passons en revue l'approche et améliorons-la.

Premièrement, le problème de rotation vient du fait que pygame.transform.rotate crée une nouvelle surface pivotée sans mettre à jour votre objet puce existant. Pour faire pivoter un sprite sur place, vous devez utiliser sprite.image = pygame.transform.rotate(sprite.image, angle).

Pour obtenir la direction, vous utilisez un angle en constante évolution entre le joueur et la position de la souris, ce qui entraîne un mouvement de balle incohérent. Au lieu de cela, la direction doit être définie une fois lorsque la balle est tirée :

self.dir = pygame.mouse.get_rel()  # Relative movement since the last event

Pour normaliser la direction et régler la vitesse, vous pouvez faire ceci :

dist = math.sqrt(self.dir[0]**2 + self.dir[1]**2)
self.speed = self.speed / dist
self.dir = (self.dir[0]/dist, self.dir[1]/dist)

Enfin, vous il faut ajouter la vitesse calculée à la position de la balle dans la fonction de mise à jour :

self.pos += self.speed[0], self.speed[1]

Voici un exemple qui intègre les améliorations mentionnées :

class Bullet(pygame.sprite.Sprite):
    def __init__(self):
        pygame.sprite.Sprite.__init__(self)
        self.image = pygame.Surface((10, 10))
        self.image.fill((255, 0, 0))
        self.rect = self.image.get_rect()
        self.speed = 10

    def update(self):
        angle = math.atan2(self.dir[1], self.dir[0])
        self.image = pygame.transform.rotate(self.image, -angle * (180 / math.pi))
        self.pos += self.speed[0], self.speed[1]
        self.rect = self.image.get_rect(center=self.pos)

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn