为了账号安全,请及时绑定邮箱和手机立即绑定

用2点找出向量

用2点找出向量

一只萌萌小番薯 2021-03-29 17:12:18
我正在帮助我的朋友玩pygame,但我们陷入困境所以正在试图获得射弹的方向,但我们无法找到如何例如:[1,1]将进入SE[1,-1]将进入NE[-1,-1]将进入NW并且[-1,1]将进入SW我们需要一个方程式,该方程式将需要玩家pos和鼠标pos并找出弹丸需要向哪个方向移动这是我们插入向量的地方:def update(self):    self.rect.x += self.vector[0]    self.rect.y += self.vector[1]然后我们在rects坐标上弹射弹丸
查看完整描述

1 回答

?
温温酱

TA贡献1752条经验 获得超4个赞

因此,首先要获得播放器到光标的矢量距离。减去两个点可以得到它们之间的向量:


distance = [mouse.x - player.x, mouse.y - player.y]

现在,您要将其标准化为单位向量。为此,您只需得到范数(通过毕达哥拉斯定理),然后将矢量除以范数即可:


norm = math.sqrt(distance[0] ** 2 + distance[1] ** 2)

direction = [distance[0] / norm, distance[1] / norm]

最后,您需要速度向量。您可以通过将方向(单位矢量)乘以速度来获得。


由于您希望发射到SE的子弹具有矢量[1, 1],因此(大概)希望所有子弹以该速度矢量的速度移动,即sqrt(2)(再次根据毕达哥拉斯定理)。所以:


bullet_vector = [direction[0] * math.sqrt(2), direction[1] * math.sqrt(2)]

就是这样。


在这里,您可以看到此代码的工作情况。(这是一个交互式可视化工具,因此,如果有任何您不了解的部分,您可以逐步进行操作。)


我在处创建一个播放器[10.0, 25.0],然后将鼠标指针从通常(但不完全)向东南的方向上移出[30.0, 70.0],并bullet_vector最终[0.5743665268941905, 1.2923246855119288]指向一个向量,该向量以速度指向相同的向东南的一般方向sqrt(2)。


这表明它可以向东南移动(如果您想完全向东南移动,mouse = Point(30.0, 45.0)则将8号线更改为),它可以沿8个罗盘点以外的方向移动,并且始终以相同的速度行进。


查看完整回答
反对 回复 2021-04-06
  • 1 回答
  • 0 关注
  • 303 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信