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!