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

Barbara Streisand
Freigeben: 2024-11-02 04:48:30
Original
311 Leute haben es durchsucht

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>
    Nach dem Login kopieren
  • Berechnen Sie den Richtungsvektor :

    <code class="py">self.dir = (mx - x, my - y)</code>
    Nach dem Login kopieren
  • 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>
    Nach dem Login kopieren
  • Berechnen Sie den Winkel des Vektors:

    <code class="py">angle = math.degrees(math.atan2(-self.dir[1], self.dir[0]))</code>
    Nach dem Login kopieren
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>
    Nach dem Login kopieren
  • 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>
    Nach dem Login kopieren
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>
    Nach dem Login kopieren
  • Zeichne die Kugel:

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

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!

Quelle:php.cn
Erklärung dieser Website
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
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage