


Pourquoi mes balles Pygame ne se déplacent-elles pas vers la souris ?
Nov 02, 2024 am 04:48 AMTrajectoire 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!

Article chaud

Outils chauds Tags

Article chaud

Tags d'article chaud

Bloc-notes++7.3.1
Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise
Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1
Puissant environnement de développement intégré PHP

Dreamweaver CS6
Outils de développement Web visuel

SublimeText3 version Mac
Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Sujets chauds

Comment utiliser la belle soupe pour analyser HTML?

Comment télécharger des fichiers dans Python

Comment utiliser Python pour trouver la distribution ZIPF d'un fichier texte

Comment travailler avec des documents PDF à l'aide de Python

Comment se cacher en utilisant Redis dans les applications Django

Comment effectuer l'apprentissage en profondeur avec TensorFlow ou Pytorch?

Présentation de la boîte à outils en langage naturel (NLTK)
