Heim  >  Artikel  >  Backend-Entwicklung  >  Wie lässt man in PyGame Kugeln auf den Mauszeiger schießen?

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

Barbara Streisand
Barbara StreisandOriginal
2024-11-02 08:49:02275Durchsuche

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

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!

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