Perbincangan ini bertujuan untuk menangani isu biasa yang dihadapi apabila menembak peluru ke arah kedudukan tetikus dalam Pygame: peluru sama ada tidak' t bergerak atau mempamerkan tingkah laku yang tidak menentu.
Pada masa tembakan, kedudukan peluru dan vektor arah ke arah tetikus perlu ditentukan. Walau bagaimanapun, kod yang diberikan tidak menetapkan vektor arah dengan betul, menyebabkan peluru bergerak tanpa diduga atau kekal pegun.
Untuk membetulkan isu ini, vektor arah harus dikira dan dinormalkan (ditukar kepada vektor unit) seperti berikut:
Dapatkan kedudukan permulaan dan kedudukan tetikus:
<code class="py">self.pos = (x, y) mx, my = pygame.mouse.get_pos()</code>
Kira vektor arah :
<code class="py">self.dir = (mx - x, my - y)</code>
Normalkan vektor:
<code class="py">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>
Hitung sudut vektor:
<code class="py">angle = math.degrees(math.atan2(-self.dir[1], self.dir[0]))</code>
Setelah arah ditentukan, peluru boleh diputar dan dikemas kini mengikut halajunya:
Putar peluru:
<code class="py">self.bullet = pygame.Surface((7, 2)).convert_alpha() self.bullet.fill((255, 255, 255)) self.bullet = pygame.transform.rotate(self.bullet, angle)</code>
Kemas kini kedudukan peluru:
<code class="py">self.pos = (self.pos[0]+self.dir[0]*self.speed, self.pos[1]+self.dir[1]*self.speed)</code>
Untuk memaparkan dengan betul peluru yang diputar, segi empat tepat memanjangnya digunakan untuk memusatkannya pada kedudukannya yang betul:
Dapatkan segi empat tepat memanjang peluru yang diputar:
<code class="py">bullet_rect = self.bullet.get_rect(center = self.pos)</code>
Lukis peluru:
<code class="py">surf.blit(self.bullet, bullet_rect)</code>
Atas ialah kandungan terperinci Mengapa Peluru Pygame Saya Tidak Bergerak Ke Arah Tetikus?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!