1

我正在创建一个小型多人游戏,并且试图找到如何将鼠标的方向与角色所在的位置进行比较...

例如,如果角色在 A 点,我希望角色面对的方向改变,使其面向鼠标所在的方向。

我按照以下指南为我的角色创建了方向动画剪辑:

度数

我尝试了许多在线代码/建议/howtos,但没有一个对我有用。

4

1 回答 1

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 的值表示逆时针旋转。

极性

将这些转换为基本方向系统,可能会有优雅的算法,例如使用点积;但是,您可以蛮力:

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";
于 2012-07-31T07:00:45.357 回答