したがって、最初にプレーヤーからカーソルまでのベクトル距離を取得します。2 つのポイントを減算すると、それらの間のベクトルが得られます。
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)]
以上です。
ここで、このコードが機能していることを確認できます。(これはインタラクティブなビジュアライザーなので、理解できない部分があれば、1 つずつ見ていくことができます。)
でプレーヤーを作成し[10.0, 25.0]
、マウス ポインタを で一般的な (ただし正確ではない) 南東方向から離し、最終的には、同じ一般的な南東方向を速度 で指すベクトルに[30.0, 70.0]
なりbullet_vector
ます。[0.5743665268941905, 1.2923246855119288]
sqrt(2)
これは、それが南東に進むことができることを示しています (正確に南東に行きたい場合は、行 8 を に変更しますmouse = Point(30.0, 45.0)
)、8 つのコンパス ポイント以外の方向に進むことができ、常に同じ速度で進むことができます。