如何在 PyGame 中让子弹朝鼠标光标射击?

Barbara Streisand
发布: 2024-11-02 08:49:02
原创
279 人浏览过

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

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责声明 Sitemap
PHP中文网:公益在线PHP培训,帮助PHP学习者快速成长!