你好我使用这段代码让玩家移动到鼠标,但这不是我希望它移动的方式,我无法找到任何地方如何获得我想要的方式。
代码工作得很好,但运动就像是平滑的,当开始或停止移动时就像平滑运动一样渐渐淡出,如果鼠标距离字符更远,它会变得更快,但我不想要我想让角色移动在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;
答案 0 :(得分:1)
您遇到的问题是每次玩家移动时都会重新计算速度。当他靠近鼠标移动时,由于距离较短,移动速度较慢。
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;
这最后一部分是你应该在每一帧都做的唯一部分。第一部分应该只进行一次。
答案 1 :(得分:0)
要移动到鼠标方向,您需要使用 Atan(ArcTangent),罪& Cos 获取鼠标位置的角度,并以该角度/方向移动Char。
以弧度计算并返回y / x点的角度 ... atan2的第一个参数始终是y坐标。
(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;