1 回答

TA貢獻1752條經(jīng)驗 獲得超4個贊
因此,首先要獲得播放器到光標(biāo)的矢量距離。減去兩個點可以得到它們之間的向量:
distance = [mouse.x - player.x, mouse.y - player.y]
現(xiàn)在,您要將其標(biāo)準(zhǔn)化為單位向量。為此,您只需得到范數(shù)(通過畢達哥拉斯定理),然后將矢量除以范數(shù)即可:
norm = math.sqrt(distance[0] ** 2 + distance[1] ** 2)
direction = [distance[0] / norm, distance[1] / norm]
最后,您需要速度向量。您可以通過將方向(單位矢量)乘以速度來獲得。
由于您希望發(fā)射到SE的子彈具有矢量[1, 1],因此(大概)希望所有子彈以該速度矢量的速度移動,即sqrt(2)(再次根據(jù)畢達哥拉斯定理)。所以:
bullet_vector = [direction[0] * math.sqrt(2), direction[1] * math.sqrt(2)]
就是這樣。
在這里,您可以看到此代碼的工作情況。(這是一個交互式可視化工具,因此,如果有任何您不了解的部分,您可以逐步進行操作。)
我在處創(chuàng)建一個播放器[10.0, 25.0],然后將鼠標(biāo)指針從通常(但不完全)向東南的方向上移出[30.0, 70.0],并bullet_vector最終[0.5743665268941905, 1.2923246855119288]指向一個向量,該向量以速度指向相同的向東南的一般方向sqrt(2)。
這表明它可以向東南移動(如果您想完全向東南移動,mouse = Point(30.0, 45.0)則將8號線更改為),它可以沿8個羅盤點以外的方向移動,并且始終以相同的速度行進。
添加回答
舉報