2016-04-30 104 views
1

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

代码的工作原理一切都很好,但是运动就像平滑一样,当开始或停止移动它时,就像平滑运动一样淡入淡出,如果鼠标距离角色越远,速度越快,但我不希望我想要角色以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

'如果鼠标远离文字不言而喻faster'你怎么从代码期待?得到一个计算器,假设'dx'为300.由于300/20 = 15,在这里你要告诉'this.x'为你的游戏的FPS每帧增加(** + = **)15个像素。如果您的游戏速度为30 FPS,即在一秒内行进的距离为450像素。很多距离。你的'dx'(X方向)只是从角色的X-pos减去鼠标X-pos。假设'mouseX' = 10和'this.x' = 200,'10 - 200' =减190 ...所以'-190/20' =减9.5。如何使用'+ ='添加一个减号值?这是否甚至工作.. ?? –

回答

0

对于移动鼠标的方向,你需要使用ATAN(反正切) & 的Cos获得鼠标正的角度,在该角/方向移动字符。

如果检查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; 
+0

感谢这一点,我一直在寻找。 – rivor2

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; 

这最后一部分是你应该在每一帧中做的唯一部分。第一部分应该只做一次。