首頁 >後端開發 >Python教學 >為什麼我的 Pygame 子彈不往滑鼠移動?

為什麼我的 Pygame 子彈不往滑鼠移動?

Barbara Streisand
Barbara Streisand原創
2024-11-02 04:48:30317瀏覽

Why Are My Pygame Bullets Not Moving Towards the Mouse?

Pygame 中的子彈軌跡:故障排除指南

本討論旨在解決在Pygame 中向滑鼠位置發射子彈時遇到的常見問題:子彈要么不'不要移動或表現出不穩定的行為。

理解問題

發射時,需要確定子彈的位置和朝向滑鼠的方向向量。然而,提供的程式碼沒有正確設定方向向量,導致子彈無法預測地移動或保持靜止。

解決問題

要修正此問題,應計算方向向量並歸一化(轉換為單位向量)如下:

  • 取得起始位置和鼠標位置:

    <code class="py">self.pos = (x, y)
    mx, my = pygame.mouse.get_pos()</code>
  • 計算方向向量:

    <code class="py">self.dir = (mx - x, my - y)</code>
  • 標準化向量:

    <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>
  • 計算向量的角度:

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

旋轉和更新子彈

方向確定後,可以根據子彈的速度旋轉和更新子彈:

  • 旋轉子彈項目符號:

    <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>
  • 更新項目符號的位置:

    <code class="py">self.pos = (self.pos[0]+self.dir[0]*self.speed, 
              self.pos[1]+self.dir[1]*self.speed)</code>
更新項目符號的位置:

  • 繪製旋轉項目符號

    正確顯示旋轉的項目符號,其邊界矩形用於將其居中於正確的位置:
    <code class="py">bullet_rect = self.bullet.get_rect(center = self.pos)</code>
  • 獲取旋轉的項目符號的邊界長方形:

    <code class="py">surf.blit(self.bullet, bullet_rect)</code>
畫子彈:

以上是為什麼我的 Pygame 子彈不往滑鼠移動?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn