2014-02-17 47 views
0

我想推動一個暴徒離開方向一定的距離我右鍵點擊暴民,但是當我使用這段代碼時,暴徒推開的距離會根據距離有多近或遠一些而改變我是對暴民。從一定距離的起始方向

target.motionX = (target.posX - player.posX) * 0.5; 
    target.motionZ = (target.posZ - player.posZ) * 0.5; 

我知道我需要弄清楚玩家所面對的方向,然後讓暴徒遠離一定的距離。我只是不知道該怎麼做。

+1

那麼,你有公式中的目標和玩家之間的距離。也許你想要的只是距離的標誌(方向)。 –

+0

你會用什麼公式? – Minigeek22

+0

我明白你的意思了。看到我的編輯,也許這是更接近。 –

回答

2

首先,你必須要找到距離:

float xDis = target.posX - player.posX; 
float zDis = target.posZ - player.posZ; 

如果xDis爲非零值,計算角度:

float tangent = zDis/xDis; 
float angle = Math.arctan(tangent); 

然後,決定對你扔的向量的長度:

float length = 0.5; 

然後在兩個軸上投影:

float xProj = length*Math.cos(angle)*Math.signum(xDis); 
float zProj = length*Math.sin(angle)*Math.signum(xDis); 

而這些是你的motionXmotionY部分。

如果xDis爲零,那我想你會需要這個特例。

float xProj = 0; 
float zProj = length*Math.signum(zDis); 
+0

那麼xProj和zProj會是我的動作嗎? – Minigeek22

+0

是的。我沒有測試過代碼,但我認爲它接近你要找的東西。 –

+0

其實,我注意到我的代碼有一個錯誤。我不應該轉換爲學位。再次看到我的編輯。 –

相關問題