2016-04-30 87 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; 

這最後一部分是你應該在每一幀中做的唯一部分。第一部分應該只做一次。