我正在创建一个小型多人游戏,并且试图找到如何将鼠标的方向与角色所在的位置进行比较...
例如,如果角色在 A 点,我希望角色面对的方向改变,使其面向鼠标所在的方向。
我按照以下指南为我的角色创建了方向动画剪辑:
我尝试了许多在线代码/建议/howtos,但没有一个对我有用。
我正在创建一个小型多人游戏,并且试图找到如何将鼠标的方向与角色所在的位置进行比较...
例如,如果角色在 A 点,我希望角色面对的方向改变,使其面向鼠标所在的方向。
我按照以下指南为我的角色创建了方向动画剪辑:
我尝试了许多在线代码/建议/howtos,但没有一个对我有用。
您可以使用这样的函数来确定度数角度:
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";