4

私はパイゲームで友達を手伝っていますが、私たちは立ち往生しています

発射体の方向を取得しようとしていましたが、方法を見つけることができません

例えば:

[1,1]はSEに行きます

[1,-1] は NE になります

[-1,-1] は北西に進みます

[-1,1] は SW に移動します

プレイヤーの位置とマウスの位置を取り、発射物が進むべき方向を見つける何らかの方程式が必要です。

ベクトルをプラグインする場所は次のとおりです。

def update(self):

    self.rect.x += self.vector[0]
    self.rect.y += self.vector[1]

次に、rects座標で発射物をブリットしています

4

1 に答える 1

10

したがって、最初にプレーヤーからカーソルまでのベクトル距離を取得します。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 つのコンパス ポイント以外の方向に進むことができ、常に同じ速度で進むことができます。

于 2013-06-27T00:50:15.820 に答える