Heim > Artikel > Backend-Entwicklung > Wie ziele ich mit Mauskoordinaten auf Kugeln in PyGame?
Problemstellung
Obwohl eine Kugelklasse erstellt wurde, scheitern die Kugeln Bewegen Sie den Mauszeiger in die vorgesehene Richtung. Versuche, die Kugeln zu drehen und zu bewegen, führten zu unberechenbarem Verhalten.
Lösung
1. Drehung und Initialisierung:
pygame.transform.rotate verändert das ursprüngliche Objekt nicht, sondern erstellt eine neue gedrehte Oberfläche. Um das Geschoss korrekt zu drehen und zu initialisieren, verwenden Sie den folgenden Code:
<code class="python">angle = math.degrees(math.atan2(-self.dir[1], self.dir[0])) self.bullet = pygame.Surface((7, 2)).convert_alpha() self.bullet.fill((255, 255, 255)) self.bullet = pygame.transform.rotate(self.bullet, angle)</code>
2. Richtung und Einheitsvektor:
Berechnen Sie den Richtungsvektor aus Setzen Sie den Spieler auf die Mausposition und normalisieren Sie ihn, um einen Einheitsvektor zu erhalten:
<code class="python">mx, my = pygame.mouse.get_pos() self.dir = (mx - x, my - y) 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>
3. Positionsaktualisierung:
Aktualisieren Sie die Position des Geschosses, indem Sie die Richtung mit einer Geschwindigkeit skalieren und zur aktuellen Position addieren:
<code class="python">self.pos = (self.pos[0]+self.dir[0]*self.speed, self.pos[1]+self.dir[1]*self.speed)</code>
4. Zeichnen des Geschosses:
So zeichnen Sie das gedrehte Geschoss in der richtigen Position:
<code class="python">bullet_rect = self.bullet.get_rect(center = self.pos) surf.blit(self.bullet, bullet_rect) </code>
Beispielcode:
<code class="python">import pygame import math class Bullet: def __init__(self, x, y): # Calculate direction and rotation ... # Create the bullet surface ... def update(self): # Update bullet position ... def draw(self, surf): # Draw the rotated bullet ... bullets = [] pos = (250, 250) run = True while run: # Game loop ... for bullet in bullets[:]: # Update bullets ... # Draw the scene ...</code>
Das obige ist der detaillierte Inhalt vonWie ziele ich mit Mauskoordinaten auf Kugeln in PyGame?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!