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