【发布时间】:2021-10-02 07:25:28
【问题描述】:
所以我试图在 Pygame 中测试一个简单的战斗系统,玩家基本上可以根据鼠标的位置向一个区域发射弹丸。例如,当他点击屏幕的左上角时,弹丸会以稳定的速度向那里移动。我创建了一个函数,可以移动列表中的每个项目符号,这是函数。
def move_bullet(bullet_pos, direction):
# TODO Make the speed of the bullet the same no matter which direction it's being fired at
bullet_pos[0] += direction[0]/50
bullet_pos[1] += direction[1]/50
bullet_rect = pygame.Rect((bullet_pos[0], bullet_pos[1]), BULLET_SIZE)
return bullet_rect
触发mousebuttondown事件时,鼠标的矢量位置减去玩家的矢量位置,计算出方向。
但是,我注意到我越接近子弹的玩家/原点,子弹的速度就越慢,因为方向矢量更小,因此速度会因鼠标的位置而异。我听说过向量归一化,但我不知道如何实现它,因为经过一些研究,显然你通过获取向量的大小并将 X 和 Y 值除以大小来归一化向量?我从可汗学院得到它,但它实际上不起作用。而且我正在为此烦恼,所以我别无选择,只能在这里问这个问题。
TL;博士
如何在 Pygame 中规范化向量?
【问题讨论】:
-
你可以一直使用
bullet_rect而不是bullet_pos[0]和bullet_pos[1],你甚至可以在bullet_rect中设置大小,所以以后你就不需要BULLET_SIZE了。它具有检测碰撞的功能。
标签: python python-3.x vector pygame normalize