Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Mengapa Peluru Pygame Saya Tidak Bergerak Ke Arah Tetikus?

Mengapa Peluru Pygame Saya Tidak Bergerak Ke Arah Tetikus?

Barbara Streisand
Barbara Streisandasal
2024-11-02 04:48:30233semak imbas

Why Are My Pygame Bullets Not Moving Towards the Mouse?

Trajektori Peluru dalam Pygame: Panduan Penyelesaian Masalah

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.

Memahami Masalah

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.

Menyelesaikan Isu

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>

Memusing dan Mengemas kini Peluru

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>

Melukis Peluru Diputar

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!

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