2013-05-26 50 views
0

我正在做一個遊戲(只使用eclipse和android sdk),我有一個基於文本文件輸入的級別構建功能。我該如何適應我的級別加載器,以便它可以在所有Android手機上運行?

因此,例如,「levelone.txt」可能包含「[2,5],[14,7],[10,9]」。當這個文件被加載時,將創建3個平臺併發送到這些位置。

這在我的測試手機(240x320)上正常工作,但在我的朋友手機上用更大的屏幕(720x1280)嘗試,座標都是錯誤的,只佔用角落中的小空間。我如何適應我目前爲止的所有功能,並根據屏幕尺寸縮放座標?

回答

2

縮放水平加載器的數學計算其實很簡單。 首先,您應該從選擇默認比例開始。意思是將您的240x320屏幕分辨率,以及您的平臺的座標和尺寸

現在,我們應該知道您的遊戲正在運行的設備的屏幕分辨率。下面將抓取屏幕分辨率爲您提供:

Display display = getWindowManager().getDefaultDisplay(); 
Point size = new Point(); 
display.getSize(size); 
int width = size.x; 
int height = size.y; 

如果你的目標前13 API,那麼你不能使用display.getSize,而不是你應該使用:

Display display = getWindowManager().getDefaultDisplay(); 
int width = display.getWidth(); 
int height = display.getHeight(); 

現在,我們有新的決議,我們可以找到你們之間默認的(240×320)分辨率和一個新的設備上規模的區別:

float xScale = (float)width/240.0f; 
float yScale = (float)height/320.0f; 

這是FORC重要e這些值爲float或double,因爲它將它們保留爲整數,因此它將不會正確縮放,因爲十進制值將被省略,並且您將有一個四捨五入的整數。這是不準確的,不會允許適當的縮放。

一旦你有了規模,你可以開始調整大小,並相應地移動你的對象。

例如,如果你的第一個平臺的立場是

int x = 200; 
int y = 120; 

,那麼只需在採取這些價值觀和規模,使它們相乘:

int x = (int)(200 * xScale); 
int y = (int)(120 * yScale); 

您還需要爲做到這一點平臺尺寸:

int width = (int)(30 * xScale); 
int height = (int)(15 * yScale); 

將30和15替換爲寬度an d平臺的高度

重要事項: 以這種方式縮放座標時,您需要縮放所有座標。這意味着如果您使用座標來檢測邊界和碰撞,那麼這些座標也必須相應地縮放以匹配。

這是另一篇關於如何獲得android設備分辨率的文章。

Getting screen resolution

希望這有助於和好運。

+0

一個令人驚訝的詳細答案。非常感謝:) – Wikaman1

+0

沒問題,只是想幫忙。 –

相關問題