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.
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.
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>
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>
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!