用2个点找到向量

Ser*_*ial 3 python pygame vector direction

我用pygame帮助我的朋友,但我们被卡住了

那些试图获得射弹的方向,但我们无法找到如何

例如:

[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]
Run Code Online (Sandbox Code Playgroud)

然后我们将射弹撞击在射线上

aba*_*ert 6

所以,首先你要获得从播放器到光标的向量距离.减去两个点可以得到它们之间的向量:

distance = [mouse.x - player.x, mouse.y - player.y]
Run Code Online (Sandbox Code Playgroud)

现在,您希望将其标准化为单位向量.要做到这一点,你只需得到标准(通过毕达哥拉斯定理),并将矢量除以常数:

norm = math.sqrt(distance[0] ** 2 + distance[1] ** 2)
direction = [distance[0] / norm, distance[1] / norm]
Run Code Online (Sandbox Code Playgroud)

最后,你想要速度矢量.你可以通过方向(单位矢量)乘以速度来得到它.

因为你想要向SE射出的子弹有矢量[1, 1],你(大概)想要所有的子弹以该速度矢量的速度移动,这是sqrt(2)(通过毕达哥拉斯定理).所以:

bullet_vector = [direction[0] * math.sqrt(2), direction[1] * math.sqrt(2)]
Run Code Online (Sandbox Code Playgroud)

就是这样.


在这里你可以看到这段代码有效.(这是一个交互式可视化工具,所以如果有任何你不理解的部分,你可以一步一步地逐步完成它.)

我创建了一个玩家[10.0, 25.0],并且鼠标指针从大致(但不完全是)东南方向开始[30.0, 70.0],并bullet_vector最终成为[0.5743665268941905, 1.2923246855119288]一个向量指向同一个东南方向的速度sqrt(2).

这表明,它可以去东南(如果你想要去的正是东南,变线8 mouse = Point(30.0, 45.0)),它可以在比8个指南针点其他方向去,它总是转到以相同的速度.