2014-01-26 74 views
0

即時嘗試讓球員看在特定的點。我有什麼看點,但只有在它的視野範圍內。我希望它也可以上下查看製作「我的世界」球員看點

public static void lookAt(double x, double y, double z) { 
    double l; 
    double w; 
    double c; 
    l = x - playerX; 
    w = z - playerZ; 
    c = Math.sqrt(l * l + w + w); 
    double alpha1 = -Math.asin(l/c)/Math.PI * 180; 
    double alpha2 = Math.acos(w/c)/Math.PI * 180; 
    if (alpha2 > 180) { 
     playerYaw = 180 - (float) alpha1; 

    } else { 
     playerYaw = (float) alpha1; 

    } 

} 

我找了一個音高算法,但似乎沒有工作。

+3

我會通過給LWC更好的名字開始。特別是對任何事情來說都是一個非常糟糕的名字,因爲它看起來像頭號。 –

回答

2

晚的答案,但很好哦,你可以計算出俯仰和偏航用簡單的三角函數如果你能得到一個代表從你的位置,你想看看該點的方向的單位向量。

要開始,你需要減去由點你的位置和規範的結果,將給我們的方向矢量(單位矢量),我們所需要的。

現在,我們可以計算出角度,Y的反正弦會給我們的俯仰角,和X的反正切和Z會給我們的偏航角。

要理解爲什麼:https://en.wikipedia.org/wiki/Inverse_trigonometric_functions

,現在你應該有俯仰和偏航,不要忘了把它們轉換成度!

這裏的一些代碼:

public static void LookAt(double px, double py, double pz , EntityPlayer me) 
{ 
    double dirx = me.getPosition(0f).X - px; 
    double diry = me.getPosition(0f).Y - py; 
    double dirz = me.getPosition(0f).Z - pz; 

    double len = Math.sqrt(dirx*dirx + diry*diry + dirz*dirz); 

    dirx /= len 
    diry /= len; 
    dirz /= len; 

    double pitch = Math.asin(dir.y); 
    double yaw = Math.atan2(dir.z, dir.x); 

    //to degree 
    pitch = pitch * 180.0/Math.PI; 
    yaw = yaw * 180.0/Math.PI; 

    yaw += 90f; 
    me.rotationPitch = (float)pitch; 
    me.rotationYaw = (float)yaw; 
} 
+0

謝謝,這個作品, 但它使玩家看看實體站在塊,而不是在實體高度。 (儘管這很容易改變) – ND88