2016-03-22 8 views
0

私は(posX, posY)(mouseX, mouseY)の間のベクトルを持ち、私はアレグロのイベントライブラリで正の整数としてマウスの位置を取得します。このベクトルからアークタンジェントを使って、私は(deltaX, deltaY)のラジアンを得ます。そのラジアンをal_draw_rotated_bitmapファンクションに差し込みます。私はビットマップがマウスカーソルの位置を指すことを期待していますが、問題はラジアンまたはベクトルがカーソルに垂直に回転させていることです。ここベクトルに垂直なベクトルのラジアン

が関連するコードである:

void setRotation(int dx, int dy) 
{ 
    float deltax = posX - mouseX; 
    float deltay = posY - mouseY; 

    rotation = atan2(deltay, deltax); 
} 

void Player::draw() 
{ 
    al_draw_rotated_bitmap(player, al_get_bitmap_width(player)/2, al_get_bitmap_height(player)/2, posX, posY, rotation, 0); 

} 

int main() 
{ 
    while(true) 
    { 
     player.setRotation(mouseX, mouseY); 
     player.draw(); 
     al_flip_display(); 
    } 
} 
+0

どの入力を使用したのか、実際に何が起こったのか、実際に何が起こったのかを明確にすることができます。 –

+0

@JimLewis詳細を追加するために投稿を編集しました。 –

答えて

0

は= (0, 100)(deltax, deltay)を想像し、それはマウスがオブジェクトの上100個の画素であるので画像が(私は信じて)全く回転させないはずです。しかし、atan2(deltay, deltax) = atan2(100, 0) = π/2は、あなたの写真が垂直に回転している理由です。

これを修正するには、わからないAllegroのX軸とY軸の方向に応じて、atan2(deltax, deltay)に変更してください。おそらく-を引数の前に追加する必要があります。

つまり、atan2はX軸を基準にして角度を測定しますが、角度はY軸を基準にして測定する必要があります(Y軸の位置合わせは回転がないため)引数を入れ替える必要があります。

+0

これはうまくいった、ありがとう!もはや90度の角度ではありません。しかし、時計回りにマウスを動かすと反時計回りに回転し、時計回りに回すと反時計回りに回転します。編集:Nevermind、私はアークタンジェントの前にdeltaXを負にしなければなりませんでした。 –

+0

@MatthewH問題はありませんが、それがあなたを助けたならば、答えが受け入れられたとマークすることは自由です。 –

関連する問題