Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Bagaimana untuk Membuat Peluru Menembak Ke arah Kursor Tetikus dalam PyGame?

Bagaimana untuk Membuat Peluru Menembak Ke arah Kursor Tetikus dalam PyGame?

Barbara Streisand
Barbara Streisandasal
2024-11-02 08:49:02275semak imbas

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

Bagaimana untuk menembak peluru ke arah kursor tetikus dalam PyGame?

Anda menghadapi masalah dalam membuat peluru anda menembak ke arah kursor tetikus dalam PyGame. Kod anda pada masa ini melibatkan penciptaan kelas Bullet, menambah peluru dan mengira sudut. Walau bagaimanapun, anda mendapati bahawa peluru tidak berputar dan bergerak seperti yang dijangkakan. Mari kita semak pendekatan dan perbaikinya.

Pertama, isu dengan putaran berpunca daripada fakta bahawa pygame.transform.rotate mencipta permukaan berputar baharu tanpa mengemas kini objek peluru sedia ada anda. Untuk memutar sprite di tempatnya, anda perlu menggunakan sprite.image = pygame.transform.rotate(sprite.image, angle).

Bagi mendapatkan arah, anda menggunakan sudut yang sentiasa berubah antara kedudukan pemain dan tetikus, yang mengakibatkan pergerakan peluru yang tidak konsisten. Sebaliknya, arah perlu ditetapkan sekali apabila peluru dilepaskan:

self.dir = pygame.mouse.get_rel()  # Relative movement since the last event

Untuk menormalkan arah dan menetapkan kelajuan, anda boleh melakukan ini:

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)

Akhir sekali, anda perlu menambah kelajuan yang dikira pada kedudukan peluru dalam fungsi kemas kini:

self.pos += self.speed[0], self.speed[1]

Berikut ialah contoh yang menggabungkan penambahbaikan yang disebutkan:

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)

Atas ialah kandungan terperinci Bagaimana untuk Membuat Peluru Menembak Ke arah Kursor Tetikus dalam PyGame?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn