AS3移动到没有平滑的鼠标

时间:2016-04-30 19:21:34

标签: flash actionscript adobe

你好我使用这段代码让玩家移动到鼠标,但这不是我希望它移动的方式,我无法找到任何地方如何获得我想要的方式。

代码工作得很好,但运动就像是平滑的,当开始或停止移动时就像平滑运动一样渐渐淡出,如果鼠标距离字符更远,它会变得更快,但我不想要我想让角色移动在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;

2 个答案:

答案 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。

如果您选中 Math API ,您会看到 Atan2

  

以弧度计算并返回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;