2012-07-31 39 views
1

我正在創建一個小型多人遊戲,並且我正在嘗試尋找如何獲得鼠標與角色所在位置相比較的方向......在ActionScript 3.0中獲取字符方向?

例如,如果角色位於A點,就像角色面對的方向發生變化,所以它正面向鼠標所在的方向。

我已經按照爲指導創建的方向爲影片剪輯我的性格:

degrees

我已經試了無數網上的代碼/建議/ HOWTO和他們沒有爲我工作。

回答

1

可以使用這樣的函數來確定度角:

public static function polarAngle(point:Point, center:Point=null):Number 
{ 
    if (!center) 
     center = new Point(0, 0); 

    var degrees:Number = Geometry.rad2deg(Math.atan2(point.y - center.y, point.x - center.x)); 

    if (degrees < 0) 
     degrees += 360; 

    return degrees; 
} 

使用此功能,point是小鼠的相比center的點,這是您的字符的寄存點或中心。

因此,這可以被稱爲如:

var angle:Number = polarAngle(new Point(mouseX, mouseY), 
           new Point(character.x, character.y)); 

我會建議使用Flash本地座標系 - 值從0到180表示順時針方向旋轉;從0到-180的值表示逆時針旋轉。

polar

每平移這些到基本方向系統中,有可能是優雅的算法,例如使用點積;然而,你可以蠻力:

if ((angle < 22.5) || (angle > 337.5)) 
    return "e"; 
if (angle < 67.5) 
    return "se"; 
if (angle < 112.5) 
    return "s"; 
if (angle < 157.5) 
    return "sw"; 
if (angle < 202.5) 
    return "w"; 
if (angle < 247.5) 
    return "nw"; 
if (angle < 292.5) 
    return "n"; 
if (angle < 337.5) 
    return "ne"; 
+0

好吧。我認爲我現在有了一個角度給我一個正確的角度,能夠提出一種方法來獲得陣列中最接近的數字?我有一個數組的每個字符方向與他們各自的角度編號(NE,SE,N,E,S,W ..等)。 – Daniel 2012-07-31 07:23:25

+0

這是一個很好的問題 - 我將思考一種更優雅的方法來指導基本方向。 – 2012-07-31 07:54:41