【发布时间】:2012-07-31 06:51:14
【问题描述】:
我正在创建一个小型多人游戏,并试图找到如何将鼠标的方向与角色所在的位置进行比较...
例如,如果角色在 A 点,我希望角色面对的方向改变,使其朝向鼠标所在的方向。
我按照以下指导为我的角色创建了方向影片剪辑:
我尝试了许多在线代码/建议/howtos,但没有一个对我有用。
【问题讨论】:
标签: actionscript-3 flash actionscript
我正在创建一个小型多人游戏,并试图找到如何将鼠标的方向与角色所在的位置进行比较...
例如,如果角色在 A 点,我希望角色面对的方向改变,使其朝向鼠标所在的方向。
我按照以下指导为我的角色创建了方向影片剪辑:
我尝试了许多在线代码/建议/howtos,但没有一个对我有用。
【问题讨论】:
标签: actionscript-3 flash actionscript
您可以使用这样的函数来确定度数角度:
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";
【讨论】: