2016-03-04 64 views
0

我正在創建一個2D遊戲,此刻我正在嘗試旋轉我的敵人,以便當我的玩家移動時它總是面向我的玩家。我正在使用點積來計算角度然後旋轉敵人,但它不起作用。下面是我如何制定的角度...OpenGL - 二維敵人不旋轉面對玩家

//calculating the angle 
float numerator = (player.x*enemy.x)+(player.y*enemy.y); 
float denominator = sqrt((player.x*player.x)+(player.y*player.y))*sqrt((enemy.x*enemy.x)+(enemy.y*enemy.y)); 
float angle = acos(numerator/denominator); 

這也是一個更新功能中重新計算。

下面是我如何顯示我的敵人......

glPushMatrix(); 
    glTranslatef(enemy.x, enemy.y, 0); 
    glRotatef(angle,0,0,1); 
    glTranslatef(-enemy.x, -enemy.y, 0); 
    enemy.drawCircle(enemy.x,enemy.y, enemy.radius); 
glPopMatrix(); 

我要去哪裏錯了?

+0

以何種方式的角度? – Xirema

+0

我也強烈推薦你將你的代碼庫轉換爲Modern OpenGL,因爲試圖在OpenGL 1.x中做這些東西是一個導致類似問題的噩夢。 [這是學習現代OpenGL的好地方](http://www.learnopengl.com/#!Introduction) – Xirema

+0

它根本不旋轉....所以我改變它旋轉角度* 180/PI來看看什麼這是否和它旋轉看我的球員有時取決於球員的位置但是大多數時間它不能正確旋轉 – BinaryX

回答

2

我認爲你在幾何公式中有一個錯誤。你實際上發現了一個敵人的矢量和一個玩家的矢量之間的角度。

什麼,你可能需要的不正是一個工作的差異矢量

double dx = enemy.x - player.x; 
double dy = enemy.y - player.y; 
double ang = atan2(dy, dx); 
+0

謝謝你這個工作! – BinaryX

+0

我也建議你定義一個Point結構(與vector相同)或者使用一個已經寫好的結構。有'(a - b).ang'這樣的東西非常方便。考慮[接受](http://i.stack.imgur.com/QpogP.png)答案是否有幫助。 –