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

Barbara Streisand
Libérer: 2024-11-02 04:48:30
original
241 Les gens l'ont consulté

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>
    Copier après la connexion
  • Calculer le vecteur direction :

    <code class="py">self.dir = (mx - x, my - y)</code>
    Copier après la connexion
  • 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>
    Copier après la connexion
  • Calculez l'angle du vecteur :

    <code class="py">angle = math.degrees(math.atan2(-self.dir[1], self.dir[0]))</code>
    Copier après la connexion

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>
    Copier après la connexion
  • 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>
    Copier après la connexion

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>
    Copier après la connexion
  • Dessiner la balle :

    <code class="py">surf.blit(self.bullet, bullet_rect)</code>
    Copier après la connexion

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!

source:php.cn
Déclaration de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!