Maison  >  Article  >  développement back-end  >  Pourquoi mes balles Pygame ne se déplacent-elles pas vers la souris ?

Pourquoi mes balles Pygame ne se déplacent-elles pas vers la souris ?

Barbara Streisand
Barbara Streisandoriginal
2024-11-02 04:48:30233parcourir

Why Are My Pygame Bullets Not Moving Towards the Mouse?

Trajectoire des balles dans Pygame : un guide de dépannage

Cette discussion vise à résoudre un problème courant rencontré lors du tir de balles vers la position de la souris dans Pygame : les balles ne ne pas bouger ou présenter un comportement erratique.

Comprendre le problème

Au moment du tir, la position de la balle et le vecteur de direction vers la souris doivent être déterminés. Cependant, le code fourni ne définit pas correctement le vecteur de direction, ce qui entraîne un mouvement imprévisible ou un maintien des balles.

Résoudre le problème

Pour résoudre ce problème, le vecteur de direction doit être calculé et normalisé (converti en vecteur unitaire) comme suit :

  • Obtenir la position de départ et la souris position :

    <code class="py">self.pos = (x, y)
    mx, my = pygame.mouse.get_pos()</code>
  • Calculer le vecteur direction :

    <code class="py">self.dir = (mx - x, my - y)</code>
  • Normaliser le vecteur :

    <code class="py">length = math.hypot(*self.dir)
    if length == 0.0:
      self.dir = (0, -1)
    else:
      self.dir = (self.dir[0]/length, self.dir[1]/length)</code>
  • Calculez l'angle du vecteur :

    <code class="py">angle = math.degrees(math.atan2(-self.dir[1], self.dir[0]))</code>

Rotation et mise à jour de la balle

Une fois la direction déterminée, la balle peut être tournée et mise à jour en fonction de sa vitesse :

  • Faites pivoter le bullet :

    <code class="py">self.bullet = pygame.Surface((7, 2)).convert_alpha()
    self.bullet.fill((255, 255, 255))
    self.bullet = pygame.transform.rotate(self.bullet, angle)</code>
  • Mettre à jour la position de la puce :

    <code class="py">self.pos = (self.pos[0]+self.dir[0]*self.speed, 
              self.pos[1]+self.dir[1]*self.speed)</code>

Dessiner la balle pivotée

Pour afficher correctement la balle pivotée, son rectangle englobant est utilisé pour la centrer à son emplacement correct. position :

  • Obtenir le rectangle englobant la balle pivotée :

    <code class="py">bullet_rect = self.bullet.get_rect(center = self.pos)</code>
  • Dessiner la balle :

    <code class="py">surf.blit(self.bullet, bullet_rect)</code>

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