2010-11-24 98 views
1

我在寫XNA遊戲。但我想要一種智能的方式讓遊戲在不同分辨率下動態呈現。對於瞭解「粘粘世界」的人們來說,就像「粘粘世界」一樣。所以可見區域的數量必須獨立於分辨率。所以,如果我設置更高的分辨率。我不想看到更多。我只想要更多的細節。當然,精靈確實有細節。遊戲開發:如何讓我的spritegame動態分辨率?

簡短例子:我有一個64x64的精靈。當我的分辨率是:

  • 720p:我想用一個尺寸(例如!)42x42繪製。
  • 1080p:必須繪製尺寸爲64x64。 (因此,1080p表示精靈的全尺寸)
  • 480p:必須繪製大小爲32x32。

因此,每個精靈必須在屏幕上看起來相同,而與分辨率無關。

但我不知道該怎麼做。
任何幫助?

回答

3

我從來沒有使用XNA,但通常是爲了解決這種問題,你只需要從屏幕的實際分辨率中提取你的精靈的位置。

這意味着,你可以存儲與絕對座標(例如,在範圍0.0f - 1.0)對象的位置,使x = 0.0是最左邊的像素可見光和1.0是最右邊的,故事的y座標相同。

然後根據此座標空間計算所有內容,並且擔心在實際繪製之前將它們轉換。當然,對於這種方法,您需要具有不同的尺寸,以獨立於分辨率的方式保持相同的比例。例如,如果您有1080p,那麼您選擇使用64x64精靈,1080/64使用16.875,因此對於720p分辨率,您需要42.6像素(如選擇:42x42),其他分辨率等等。

轉型是那麼很簡單:

float xcord = ... 
float ycord = ... 

int xscreen = (int)(xcord*xresolution) 
int yscreen = (int)(ycord*yresolution) 

(我不知道是否已經XNA使用的float座標)

另外其實我不知道你是什麼樣的遊戲但是如果你的屏幕只顯示整個世界/遊戲的視口/你可以很容易地將滾動部分與這個轉換結合在一起,因爲你可以很容易地抵消它以獲得屏幕座標:

float xcord = 15.4 /* something absolute to the world*/ 
int xscreen = (int)((xcord - xviewport_offset) * xresolution) 

其中xviewport_offset應該是視口左側的座標,當然差別應該是< 1.0,否則精靈會在外面。

+0

這看起來不錯!謝謝! – 2010-11-24 18:22:39

1

當使用SpriteBatch傳遞縮放矩陣Matrix.CreateScale)到SpriteBatch.Begin

不要忘記考慮縱橫比(this question可能值得閱讀)。

您可以結合縮放和轉換矩陣處理滾動等

你可能需要閱讀關於這個主題here(包括在回答這個問題談談如何世界/圖/項目的鏈接,回答我的答案空間工作)以及here以及可能的herehere

相關問題