Wie schieße ich in PyGame eine Kugel in Richtung des Mauszeigers?
Sie haben Probleme damit, Ihre Kugel in Richtung des Mauszeigers schießen zu lassen in PyGame. Ihr Code umfasst derzeit das Erstellen einer Bullet-Klasse, das Hinzufügen von Aufzählungszeichen und die Berechnung des Winkels. Sie stellen jedoch fest, dass sich die Kugeln nicht wie erwartet drehen und bewegen. Lassen Sie uns den Ansatz durchgehen und ihn verbessern.
Erstens ergibt sich das Problem mit der Rotation aus der Tatsache, dass pygame.transform.rotate eine neue gedrehte Oberfläche erstellt, ohne Ihr vorhandenes Aufzählungsobjekt zu aktualisieren. Um ein Sprite an Ort und Stelle zu drehen, müssen Sie sprite.image = pygame.transform.rotate(sprite.image, angle) verwenden.
Um die Richtung zu ermitteln, verwenden Sie einen sich ständig ändernden Winkel zwischen den Spieler und Mausposition, was zu inkonsistenten Geschossbewegungen führt. Stattdessen muss die Richtung einmalig beim Abfeuern der Kugel festgelegt werden:
self.dir = pygame.mouse.get_rel() # Relative movement since the last event
Um die Richtung zu normalisieren und die Geschwindigkeit festzulegen, können Sie Folgendes tun:
dist = math.sqrt(self.dir[0]**2 + self.dir[1]**2) self.speed = self.speed / dist self.dir = (self.dir[0]/dist, self.dir[1]/dist)
Zuletzt Sie Sie müssen die berechnete Geschwindigkeit zur Position des Geschosses in der Aktualisierungsfunktion hinzufügen:
self.pos += self.speed[0], self.speed[1]
Hier ist ein Beispiel, das die genannten Verbesserungen enthält:
class Bullet(pygame.sprite.Sprite): def __init__(self): pygame.sprite.Sprite.__init__(self) self.image = pygame.Surface((10, 10)) self.image.fill((255, 0, 0)) self.rect = self.image.get_rect() self.speed = 10 def update(self): angle = math.atan2(self.dir[1], self.dir[0]) self.image = pygame.transform.rotate(self.image, -angle * (180 / math.pi)) self.pos += self.speed[0], self.speed[1] self.rect = self.image.get_rect(center=self.pos)
Das obige ist der detaillierte Inhalt vonWie lässt man in PyGame Kugeln auf den Mauszeiger schießen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!