首頁  >  文章  >  後端開發  >  如何在 PyGame 中讓子彈朝滑鼠遊標射擊?

如何在 PyGame 中讓子彈朝滑鼠遊標射擊?

Barbara Streisand
Barbara Streisand原創
2024-11-02 08:49:02275瀏覽

How to Make Bullets Shoot Towards the Mouse Cursor in PyGame?

如何在 PyGame 中發射子彈到滑鼠遊標?

您在使子彈向滑鼠遊標發射時遇到問題在 PyGame 中。您的程式碼目前涉及建立 Bullet 類別、新增項目符號和計算角度。然而,您發現子彈沒有按預期旋轉和移動。讓我們回顧一下該方法並改進它。

首先,旋轉問題源自於 pygame.transform.rotate 建立一個新的旋轉表面而不更新現有的子彈物件。要旋轉精靈到位,您需要使用 sprite.image = pygame.transform.rotate(sprite.image, angle)。

至於獲取方向,您使用的是精靈之間不斷變化的角度玩家和滑鼠位置,這會導致子彈移動不一致。相反,需要在子彈發射時設定一次方向:

self.dir = pygame.mouse.get_rel()  # Relative movement since the last event

要標準化方向並設定速度,您可以這樣做:

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)

最後,您需要將計算出的速度加入更新函數中的子彈位置:

self.pos += self.speed[0], self.speed[1]

這是一個包含上述內容的範例改進:

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)

以上是如何在 PyGame 中讓子彈朝滑鼠遊標射擊?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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