我用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]
然后我们在射击线上击打射弹
答案 0 :(得分:6)
所以,首先你要获得从玩家到光标的向量距离。 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个罗盘点以外的方向,并且它总是以相同的速度运行。