AS3 不平滑地移动到鼠标
AS3 Move to mouse without smoothment
你好,我使用这段代码让玩家移动到鼠标,但这并不是我真正想要的移动方式,而且我无法在任何地方找到如何获得我想要的方式。
代码工作得很好,但移动很流畅,当开始或停止移动时,它像淡入和淡出一样平滑移动,如果鼠标离角色越远,它移动得越快,但我不希望我想要角色以 1 恒定速度移动我也想让它无限远,不仅仅是鼠标停止的地方,而是直接沿着鼠标指向的方向移动。
感谢帮助! :)
代码:
private var _playerSpeed:Number = 20;
var dx:Number = parent.mouseX - this.x;
var dy:Number = parent.mouseY - this.y;
this.x += dx / _playerSpeed;
this.y += dy / _playerSpeed;
您遇到的问题是每次玩家移动时都重新计算速度。当他靠近鼠标时,由于距离更近,你移动得更慢。
private var _playerSpeed:Number = 20;
var dx:Number = parent.mouseX - this.x;
var dy:Number = parent.mouseY - this.y;
将dx和dy除以距离,将它们化为分数(单位向量):
var distance:Number = Math.sqrt(Math.pow(dx,2)+Math.pow(dy,2));
dx = dx/distance;
dy = dy/distance;
然后用分数(单位向量)乘以速度来找到你的恒定速度:
dx += dx*playerSpeed;
dy += dy*playerSpeed;
这最后一部分是你应该在每一帧都做的唯一部分。第一部分应该只做一次。
要移动到鼠标方向你需要使用Atan (ArcTangent), Sin & Cos 获取鼠标位置的角度并在 angle/direction.
中移动 Char
如果你检查Math API, you'll see Atan2就是你想要的。
Computes and returns the angle of the point y/x in radians... the
first parameter to atan2 is always the y coordinate.
(代码未在 Flash 中测试)示例如下:
private var _playerSpeed:Number = 20;
var dx:Number = parent.mouseX - this.x;
var dy:Number = parent.mouseY - this.y;
//# One of these two is correct for Angle result in your app
var angle:Number = Math.atan2( dy, dx ) * Math.PI / 180;
//var angle:Number = Math.atan2( dy, dx ) * ( 180 / Math.PI); //# or try this version
this.x += Math.cos( angle ) * _playerSpeed;
this.y += Math.sin( angle ) * _playerSpeed;
你好,我使用这段代码让玩家移动到鼠标,但这并不是我真正想要的移动方式,而且我无法在任何地方找到如何获得我想要的方式。
代码工作得很好,但移动很流畅,当开始或停止移动时,它像淡入和淡出一样平滑移动,如果鼠标离角色越远,它移动得越快,但我不希望我想要角色以 1 恒定速度移动我也想让它无限远,不仅仅是鼠标停止的地方,而是直接沿着鼠标指向的方向移动。
感谢帮助! :)
代码:
private var _playerSpeed:Number = 20;
var dx:Number = parent.mouseX - this.x;
var dy:Number = parent.mouseY - this.y;
this.x += dx / _playerSpeed;
this.y += dy / _playerSpeed;
您遇到的问题是每次玩家移动时都重新计算速度。当他靠近鼠标时,由于距离更近,你移动得更慢。
private var _playerSpeed:Number = 20;
var dx:Number = parent.mouseX - this.x;
var dy:Number = parent.mouseY - this.y;
将dx和dy除以距离,将它们化为分数(单位向量):
var distance:Number = Math.sqrt(Math.pow(dx,2)+Math.pow(dy,2));
dx = dx/distance;
dy = dy/distance;
然后用分数(单位向量)乘以速度来找到你的恒定速度:
dx += dx*playerSpeed;
dy += dy*playerSpeed;
这最后一部分是你应该在每一帧都做的唯一部分。第一部分应该只做一次。
要移动到鼠标方向你需要使用Atan (ArcTangent), Sin & Cos 获取鼠标位置的角度并在 angle/direction.
中移动 Char如果你检查Math API, you'll see Atan2就是你想要的。
Computes and returns the angle of the point y/x in radians... the first parameter to atan2 is always the y coordinate.
(代码未在 Flash 中测试)示例如下:
private var _playerSpeed:Number = 20;
var dx:Number = parent.mouseX - this.x;
var dy:Number = parent.mouseY - this.y;
//# One of these two is correct for Angle result in your app
var angle:Number = Math.atan2( dy, dx ) * Math.PI / 180;
//var angle:Number = Math.atan2( dy, dx ) * ( 180 / Math.PI); //# or try this version
this.x += Math.cos( angle ) * _playerSpeed;
this.y += Math.sin( angle ) * _playerSpeed;