Wie lässt man in PyGame Kugeln auf den Mauszeiger schießen?

Barbara Streisand
Freigeben: 2024-11-02 08:49:02
Original
348 Leute haben es durchsucht

How to Make Bullets Shoot Towards the Mouse Cursor in PyGame?

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
Nach dem Login kopieren

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)
Nach dem Login kopieren

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]
Nach dem Login kopieren

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)
Nach dem Login kopieren

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!

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