如何在 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中文網其他相關文章!