我一直在爲Windows遊戲項目工作了一段時間。我曾經有一個靜態的1600 x 900分辨率,對我來說工作得很好。但對於我的一些測試者來說並不是那麼重要。XNA:正交窗口調整大小不拉伸
這讓我在基於XNA的遊戲中尋找分辨率獨立性。我經歷了很多虛擬分辨率系統,它們繪製RenderTarget2D上的所有內容,並將其擴展爲適合窗口大小。但是這對我不起作用。
我想知道的是我如何計算一個類似於Terraria使用的投影矩陣。對於那些不知道它如何在terraria中工作的人(無論如何,我認爲它曾經是不同的)是,一旦你調整遊戲窗口,你會看到更多的東西在屏幕上。
目前我的投影矩陣的定義是這樣的:
Projection = Matrix.CreateOrthographicOffCenter(-25 * _graphics.Viewport.AspectRatio,
25 * _graphics.Viewport.AspectRatio,
-25, 25,
-1, 1);
這工作時,窗口的大小水平變化。我側身看到更多東西,一切都很好。但是,一旦我垂直調整窗口大小,所有東西都會夾在一起。
有沒有一種方法來計算投影矩陣,以便它可以讓我調整窗口的水平和垂直?
編輯:
我使用的相機類是間接的。一切都在Farseer物理座標空間中,當某些東西被繪製到屏幕上時,它通過Viewport.Unproject()轉換。
SOLUTION:
由於gareththegeek在所選答案的評論部分中指出,我特別的投影矩陣,我形成後是這樣的:
Projection = Matrix.CreateOrthographicOffCenter(-(_graphics.Viewport.Width/1600f * 44),
(_graphics.Viewport.Width/1600f * 44),
-(_graphics.Viewport.Height/900f * 25), (_graphics.Viewport.Height/900f * 25),
-1, 1);
爲什麼不在每次窗口重新調整大小時調用上面的代碼位呢? – ClassicThunder 2013-04-28 21:50:25
我這樣做,在Window.ClientSizeChanged事件中,但如上所述,它僅在水平調整窗口大小時起作用,並且在垂直方向上打開時會嚴重損壞。 – aRkker 2013-04-29 05:38:29