2012-09-12 33 views
12

Android使用RectF結構繪製位圖。我正在研究我的遊戲結構,因此,例如,Sprite將具有x/y座標,寬度,高度,速度等。這意味着每次在我的渲染循環中,我必須在找出源/目標RectF的時候將這些整數轉換爲浮點數......或者,我可以更具普遍性並隨處使用浮點數,以便當需要模擬物理和渲染,所有的類型已經是相同的類型...即使對於什麼屬性是不必要的(我不需要一個浮點「x位置」,但將不得不在渲染時拋出if不)。對於Android,我應該更頻繁地爲我的遊戲使用float數據類型,還是僅在繪圖時強制浮動?

如果漂浮物通常是2-10倍的更不方便(每http://developer.android.com/guide/practices/performance.html),那麼正確的方向是什麼?

TLDL:我應該投出int來渲染渲染,還是讓所有的參數變量都是浮點數,即使浮點數效率低下?類型轉換效率如何?

+1

我預計了一段時間來分析你的近期.... :) 對於所有這一切來說,值得一提的是,浮點數的計算速度很慢,所以不斷的投射也許......分析表明它更好你要堅持漂浮,而不是不斷地改變它們。 – Shark

+0

這裏唯一正確的答案是:嘗試兩者和基準。這取決於計算還是鑄造占主導地位。 (或者,如果兩者中的任何一個確實是一個問題。) – millimoose

+0

在很多情況下,即使不是大多數情況下,您也無法避免浮點算術。另請注意,您提供的鏈接指出,在沒有FPU的設備上,浮點運算速度可能會降低2倍。作爲兩種不同設備之間的比較,提到10倍速差。 – harism

回答

5

要做到這一點,最好的方法是在指定的容差範圍內以最高的精度進行計算,以達到預期的結果。這意味着如果您需要使用雙打進行計算並獲得預期結果的一致性,那麼請使用它們。找出哪裏可以接受的精度較低,並且只對浮點數的操作有要求。請記住,你的世界不需要接近地球重力墜落的物體,你可以簡化的東西,並使重力10而不是9.81,使像素對應甚至單位等,這也將有所幫助,如果你定義你的常量在相同的單位,並避免做單位轉換做數學運算(因爲這會導致額外的操作),最好添加更多的最終常數,它們具有像cm/s,m/s和km/h這樣的重力,而不是隻有一個並將其轉換一千次。哦,並且將int轉換爲浮點數的代價並不是很高,相比於乘以2個浮點數,所以請考慮一下。

我還會注意到FPU在現代android手機中越來越普遍,所以使用浮點數學的問題變得不那麼重要(儘管不是全部)。

我想要注意的另一件事是Double/Float/Integer與double/float/int。前者需要創建新的對象來使用,不應該用於數學(儘可能),而後者是基元,並且不會導致創建新對象,它們的創建成本較低。

+0

謝謝我假設: 'float a = 1.12f; int b = 2; float c = a + b;' 可能是壞的或比 'float a = 1.12f; float b = 2; float c = a + b;' – user11398

+0

http://gamasutra.com/view/news/165567/Indepth_Float_precision__From_zero_to_100_digits.php#.UFGZeK6tbZ8 – Shark

相關問題