1

画面の中央で戦車を回転させ、左ボタンをクリックすると、小さな発射物がその場所に移動する、小さな 2D 戦車砲塔ゲームをやっています。

私は現在、現在の場所と目的の場所があるポイントにいます。今行う必要があるのは、これらの 2 つのポイントの大きさを取得することです。これは 1 または 0 を返す必要があります。

これは私の C++ VectorClass マグニチュード関数です:

float vector2D::magnitude(vector2D vec2)//<! Vector magnitude
{
    float result;
    result = (sqrt(x*vec2.x)+(y*vec2.y));
    return result;
}

これは、希望する現在の場所を正規化するコードです。

currentPos.x = laserTexture.getSize().x/2.0f;
currentPos.y = laserTexture.getSize().y/2.0f;
desiredPos.x = sf::Mouse::getPosition().x;
desiredPos.y = sf::Mouse::getPosition().y;
normalisedLocation = magnitude(desiredPos - currentPos);

現在の位置は、画面中央の固定回転ポイントである、laserTexture の中央に関連付けられています。

私の目的の場所は、X と Y の位置を返すマウス クリックです (これは動作します)。

数学は私の得意分野ではないので、このようなことをプログラミングすることになると、他の人よりも苦労します。

私の最終目標は、正規化された位置を取得することです。次に、マウスの左ボタンをクリックすると、戦車の砲塔が発砲し、発射体が目的の位置に移動します。

明確にするために:

  • 私のマグニチュード関数は正しいですか?
  • 希望する位置と現在の位置を正しく正規化していますか?

ありがとう

4

4 に答える 4

0

なぜ大きさが必要なのですか?角度(度またはラジアン)である方向が必要です。タンクのベース位置と、マウスをクリックした目的の位置が既にわかっているため、そこから、ポイントからポイントまでの角度を計算する必要があります。少しのピタゴラスと三角法で角度を計算し、タンクをその角度に回転させ、発射体を同じ方向に発射することができます。

于 2014-05-27T12:13:56.317 に答える