Heim >Backend-Entwicklung >Python-Tutorial >Wie ziele ich mit Mauskoordinaten auf Kugeln in PyGame?

Wie ziele ich mit Mauskoordinaten auf Kugeln in PyGame?

Patricia Arquette
Patricia ArquetteOriginal
2024-11-01 17:30:30455Durchsuche

How To Aim Bullets Using Mouse Coordinates in PyGame?

Zielen einer Kugel in PyGame mithilfe von Mauskoordinaten

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:

  • Wenn eine Kugel abgefeuert wird, sollte die Richtung in diesem Moment bestimmt werden und sich nicht ständig ändern.
  • 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!

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