1

マウスのX、Y位置をプレーヤーの位置から16方向のいずれかに変換するための最良の式は何でしょうか。

私はc++、sfml 1.6で作業しているので、すべての位置を簡単に取得できますが、プレーヤーの位置などからの角度に基づいてそれらを変換する方法がわかりません。(私は数学が得意ではなかったし、4つ以上の方向ifについてはステートメントが複雑すぎるように見えます)。

また、方向をデルタX、Yに変換するサーバーに送信して、次のようなことができるようにします。

player.Move(deltaX * speed * GetElapsedTime(), ...Y);
4

2 に答える 2

0

atan2マウスの位置と正のX軸の間の角度を取得するために使用できます。

#include <cmath>

float player_x = ...;
float player_y = ...;
float mouse_x = ...;
float mouse_y = ...;

float angle = std::atan2(mouse_y - player_y, mouse_x - player_x);

angleによって返されるのは、 (排他的)と(包括的)std::atan2()の間の値です。-M_PIM_PI

-M_PI           Left (-180°)
-0.5 * M_PI     Down (-90°)
 0              Right (0°)
 0.5 * M_PI     Up (90°)
 M_PI           Left (180°)

この値は、マッピングを「16方向のいずれかに」設定する方法に応じて、つまり、どの離散方向にどの値を割り当てるかに応じて変換できます。

角度が与えられると、X/Yデルタを表す単位ベクトルを取得することも非常に簡単です。

float dx = std::cos(angle);
float dy = std::sin(angle);
于 2011-07-04T14:52:40.787 に答える
0

「最も簡単な」方法は、2 組の座標 (1 つは現在のプレーヤーの位置、もう 1 つは現在のマウスの位置) をプレーヤーの位置に対する角度に変換することです。プレーヤー (または、ゲームの仕組みに応じて北) です。次に、16 方向のそれぞれが、指定された 22.5 度の間隔に変換されます。

ただ、数学が苦手ということで、それより具体的なことを求めているのではないでしょうか。

于 2011-07-04T14:48:03.757 に答える