所以塊傳輸炮彈,首先要從玩家光標獲得矢量距離。 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得到的方向(單位矢量)乘以速度。你可能想要所有子彈以速度矢量的速度移動,即sqrt(2)
(再次由畢達哥拉斯定理)。因爲你想要一顆子彈射擊到東南的矢量[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個指南針點其他方向去,它總是轉到以相同的速度。
這個等式背後的規則是什麼?播放器是否從播放器向鼠標光標的方向發射?或者從屏幕中心到鼠標光標?或者是其他東西?她被限制在8個羅盤方向,還是她可以在任何角度之間進行射擊? – abarnert
玩家可以從任何方向射擊,例如玩家在玩家面前點擊,如果玩家在角色背後點擊箭頭返回的話,那麼箭頭將直接向前,因此給出mousepos和玩家pos我們需要找到箭頭需要走哪個方向 – Serial