今回の関数は、目的地まで直線距離で1ピクセル移動したい場合x,y方向にそれぞれ何ピクセルずつ移動すればよいか求めてくれる関数です。
なにが便利かと言うと、どの方向に移動するときも、移動速度を一定に保てる点です。
特に、PC用コントローラーのアナログスティックを使うときに便利です。
普通、斜めに移動する時、異常に速く移動してしまいますよね。あれを解決することができます。
さらに、アナログスティックを用いた場合でも、かなり正確に移動させることができるようになります。
以下ソースコード
#include
struct AppData{
int destinX, destinY; //目的地の座標を格納
int locatX, locatY; //現在地の座標を格納
double disX, disY; //結果移動量を格納
};
int MonoApp(AppData &a){
if(a.destinX!=a.locatX && a.destinY!=a.locatY){
//目的地までの距離を絶対値で得る
int fabDestX = fabs(a.destinX - a.locatX);
int fabDestY = fabs(a.destinY - a.locatY);
//直線距離を求める
int addSide = fabDestX*fabDestX + fabDestY*fabDestY;
double obli = sqrt(addSide);
//x,y移動量をそれぞれ絶対値で求める
a.disX = fabDestX / obli;
a.disY = fabDestY / obli;
//x,y移動量をそれぞれ符号有りで求める
if(a.destinX < a.locatX) a.disX *= -1;
if(a.destinY < a.locatY) a.disY *= -1;
return 1;
}
//現在地と目的地が同じだった場合
a.disX = 0, a.disY = 0;
return 0;
}