我正在用 pygame 帮助我的 friend ,但我们被卡住了
我们正在尝试确定射弹的方向,但我们无法找到方法
例如:
[1,1] 会去 SE
[1,-1] 会去 NE
[-1,-1] 将走向 NW
和 [-1,1] 会去 SW
我们需要某种方程式来获取玩家位置和鼠标位置并找出弹丸需要去的方向
这里是我们插入向量的地方:
def update(self):
self.rect.x += self.vector[0]
self.rect.y += self.vector[1]
然后我们在直角坐标处 blitting 射弹
最佳答案
所以,首先你要获得从玩家到光标的矢量距离。 Subtracting two points gives you the vector between them :
distance = [mouse.x - player.x, mouse.y - player.y]
现在,您想 normalize that to a unit vector .为此,您只需获得范数(通过 Pythagorean theorem ),然后将向量除以范数:
norm = math.sqrt(distance[0] ** 2 + distance[1] ** 2)
direction = [distance[0] / norm, distance[1] / norm]
最后,您想要 velocity向量。你可以通过 multiplying 得到它速度方向(单位矢量)。
由于您希望射向 SE 的子弹具有矢量 [1, 1]
,您(大概)希望所有子弹以该速度矢量的速度移动,即 sqrt(2)
(再次由勾股定理)。所以:
bullet_vector = [direction[0] * math.sqrt(2), direction[1] * math.sqrt(2)]
就是这样。
Here你可以看到这段代码在工作。 (这是一个交互式可视化工具,因此如果您有任何不理解的部分,您可以逐步了解它。)
我在 [10.0, 25.0]
创建了一个播放器,并在 [30.0, 70.0]
处创建了一个鼠标指针,该指针通常(但不完全是)东南方向,并且 bullet_vector
最终为 [0.5743665268941905, 1.2923246855119288]
,一个向量指向相同的一般东南方向,速度为 sqrt(2)
.
这表明它可以向东南方向走(如果你想恰好向东南方向走,把第8行改成mouse = Point(30.0, 45.0)
),它可以走在 8 个罗盘点以外的方向,它总是以相同的速度运行。
关于python - 查找具有 2 个点的向量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17332759/