2011-08-27 112 views
2

我在這裏看到很多關於這個謎題的答案,但是每次我嘗試並實現答案時,它們似乎都不起作用。我想回答一些答案,但不能。也許這是因爲我的'聲譽'級別?根據角度和速度更新座標

無論如何,這是一個簡單的座標問題的遊戲。對大多數人來說很簡單,但對我來說不是。 (吸數學..硬核)

我已經在屏幕中間有一艘飛船。它不會離開旋轉(user.fAngle)。它確實有速度(user.dVelocity),純粹用於計算它在世界上的位置。

現在我的船正在以1的速度移動。這意味着無論它「走向」,它都以那個速度移動(再次,純粹是爲了地圖座標的目的)。不會減慢或加速,但最終會。速度最終會成爲一個變化的變量。

這是我現在有..

double radians = (Math.PI/180) * (user.fAngle); 
    worldX = (int)(worldX + user.dVelocity * Math.cos(radians)); 
    worldY = (int)(worldY + user.dVelocity * Math.sin(radians)); 

user.fangle當然= 0-359

worldX和worldY從0開始,當你開始遊戲。我正在嘗試根據船舶的角度和硬編碼速度修改worldX和worldY的每一幀。

大多數情況下,這是有效的。但奇怪的是,在某些時候,座標會凍結。或者他們會在0時停止,而不是進入否定狀態。再次,這隻發生在某些時間和某些角度。

我看到的另一個問題是,當數字確實發生變化時,它們總是以一致的速度變化。換句話說,假設north是0.如果我以5的角度移動,worldY變量應該改變很多,但是worldX應該稍微改變一點。這沒有發生。

在我的調試中,我確定user.fAngle確實在0-359的範圍內。我不知道還有什麼要檢查。

感謝您的閱讀,我感謝您的幫助。

+0

如果你能提供導致問題的「某些角度」,這將有所幫助。 – WaelJ

回答

2

你的問題來自於這樣一個事實:

int x = 0; 
x = x + 0.5; // rounding down : x == 0 
x = x + 0.5; // rounding down : x == 0 

你需要一個浮點變量來記住位置。

float x = 0; 
x = x + 0.5; // x == 0.5 
worldX = (int)x; // worldX == 0 
x = x + 0.5; // x == 1 
worldX = (int)x; // worldX == 1 

這將解決問題。

+0

哦,杜。我正在鑄造整型。啊!好的,這個工作非常好,謝謝。 :) – Salx

0

不確定這是否會起作用,但在將角度轉換爲弧度時,嘗試用PI乘以角度除以180後的角度。

​​

編輯:

我只注意到worldX和worldY具有int類型。你應該將它們的類型改爲雙倍,因爲位移最可能是分數。

0

」 ......讓我們說北方是0。如果我在5角移動時,worldY 變量應改變了很多,但worldX應該有點改變 ,這是不會發生。「

你給的X和Y運動的公式實際上假定北方爲90度。

在三角中,0度的角度是沿着+ X軸,這將對應於正東在三角圖中,增加角度會在原點附近逆時針移動如果您希望角度像羅盤標題一樣,北向0度,東向90度等等,您可以應該如下定義radians

double radians = (Math.PI/180) * (90.0 - user.fAngle);