2012-07-31 38 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