Heim  >  Artikel  >  Backend-Entwicklung  >  Warum bewegen sich meine Pygame-Kugeln nicht in Richtung der Maus?

Warum bewegen sich meine Pygame-Kugeln nicht in Richtung der Maus?

Barbara Streisand
Barbara StreisandOriginal
2024-11-02 04:48:30233Durchsuche

Why Are My Pygame Bullets Not Moving Towards the Mouse?

Kugelflugbahn in Pygame: Ein Leitfaden zur Fehlerbehebung

Diese Diskussion zielt darauf ab, ein häufiges Problem anzusprechen, das beim Abfeuern von Kugeln in Richtung der Mausposition in Pygame auftritt: Die Kugeln fliegen entweder nicht 🎜>

Das Problem verstehen

Zum Zeitpunkt des Abfeuerns müssen die Position des Geschosses und der Richtungsvektor zur Maus bestimmt werden. Allerdings stellt der bereitgestellte Code den Richtungsvektor nicht richtig ein, was dazu führt, dass sich die Kugeln unvorhersehbar bewegen oder stationär bleiben.

Lösung des Problems

Um dieses Problem zu beheben, sollte der Richtungsvektor berechnet und berechnet werden normalisiert (in einen Einheitsvektor umgewandelt) wie folgt:

  • Ermitteln Sie die Startposition und die Mausposition:

    <code class="py">self.pos = (x, y)
    mx, my = pygame.mouse.get_pos()</code>
  • Berechnen Sie den Richtungsvektor :

    <code class="py">self.dir = (mx - x, my - y)</code>
  • Normalisieren Sie den Vektor:

    <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>
  • Berechnen Sie den Winkel des Vektors:

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

Sobald die Richtung bestimmt ist, kann das Geschoss entsprechend seiner Geschwindigkeit gedreht und aktualisiert werden:

  • Drehen Sie das Aufzählungszeichen:

    <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>
  • Aktualisieren Sie die Position des Aufzählungszeichens:

    <code class="py">self.pos = (self.pos[0]+self.dir[0]*self.speed, 
              self.pos[1]+self.dir[1]*self.speed)</code>
Zeichnen Sie das gedrehte Aufzählungszeichen

Zur korrekten Anzeige Beim gedrehten Aufzählungszeichen wird sein Begrenzungsrechteck verwendet, um es an der richtigen Position zu zentrieren:

  • Erhalten Sie das Begrenzungsrechteck des gedrehten Aufzählungszeichens:

    <code class="py">bullet_rect = self.bullet.get_rect(center = self.pos)</code>
  • Zeichne die Kugel:

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

Das obige ist der detaillierte Inhalt vonWarum bewegen sich meine Pygame-Kugeln nicht in Richtung der Maus?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn