2014-02-27 132 views
0

這一個讓我難住。我不知道究竟是什麼導致了這個問題,但我會盡力提供儘可能多的相關信息。請詢問您是否有任何問題。向左移動得太快,根本沒有向右移動

advance()方法被稱爲約每0.0025秒一次,這也是elapsedTime的值。

private int speed = 1; 

public void advance(float elapsedTime) { 
    rectangle.x = (int) (rectangle.x - speed * elapsedTime); 
} 

它的x座標向左移動太快了,即使我把我的速度0.0000001。但是,每當我嘗試將其移動到右側時:

public void advance(float elapsedTime) { 
    rectangle.x = (int) (rectangle.x + speed * elapsedTime); 
} 

它根本不動。

任何想法?我很難過!

+0

在您的函數調用中編輯 –

+0

您可以發佈調用'advance()'的代碼嗎? –

+0

在上面添加了它。 – Evorlor

回答

5

這是因爲矩形座標存儲爲整數,因此它們一次最多隻能更改1。由於平局運行頻繁,因此在向左移動時,移動速度仍然非常快,因爲它無法一次移動到小於1個像素。

它完全沒有向右移動的原因是因爲四捨五入。在轉換爲int時,double向下舍入。因此,如果你的位置是5,並且你嘗試加0.00001,然後將它轉換爲一個int,那麼你的位置最終仍然是5.如果你減去0.000001,那麼它將被舍入到4,這就是爲什麼移動到左邊的作品。

+0

嗯,我喜歡你的想法。讓我看看它 – Evorlor