Mengapa Peluru Pygame Saya Tidak Bergerak Ke Arah Tetikus?

Barbara Streisand
Lepaskan: 2024-11-02 04:48:30
asal
311 orang telah melayarinya

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>
    Salin selepas log masuk
  • Kira vektor arah :

    <code class="py">self.dir = (mx - x, my - y)</code>
    Salin selepas log masuk
  • 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>
    Salin selepas log masuk
  • Hitung sudut vektor:

    <code class="py">angle = math.degrees(math.atan2(-self.dir[1], self.dir[0]))</code>
    Salin selepas log masuk

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>
    Salin selepas log masuk
  • 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>
    Salin selepas log masuk

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>
    Salin selepas log masuk
  • Lukis peluru:

    <code class="py">surf.blit(self.bullet, bullet_rect)</code>
    Salin selepas log masuk

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!

sumber:php.cn
Kenyataan Laman Web ini
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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan