2016-07-31 59 views
0

我的圖形設備被設置如下:很難理解渲染目標和後臺緩存在monogame

GraphicsDeviceManager = new GraphicsDeviceManager(GameBase.GameRef); 
GraphicsDeviceManager.PreferredBackBufferWidth = 640; 
GraphicsDeviceManager.PreferredBackBufferHeight = 480; 
GraphicsDeviceManager.ApplyChanges(); 

我不能對谷歌的任何地方找到解釋的首選後臺緩衝區寬度是指什麼。

我設置了這樣的渲染目標:

RenderTarget = new RenderTarget2D(
    GraphicsDeviceManager.GraphicsDevice, 
    640, 
    480, 
    false, 
    GraphicsDeviceManager.GraphicsDevice.PresentationParameters.BackBufferFormat, 
    DepthFormat.Depth24); 

我找不到什麼640和480相對於如何渲染目標繪製實際上意味着在谷歌什麼。

我遇到的問題是,如果我調整窗口大小,一切都會延伸。我試圖理解什麼是單人遊戲正在做這件事,然後最終找出解決方案。

在開始我的窗戶是640×480和PreferredBackBufferWidth和高度四百八十零分之六百四十零和渲染目標是四百八十○分之六百四十〇

如果我調整窗口的大小,以1920×1080例如,一切綿延,所以不知何故monogame不再將640x480紋理渲染到屏幕的640x480部分,但我沒有更改任何值或爲此完成任何代碼。

如果我調整屏幕,應該渲染目標被摧毀,並在窗口的新尺寸重建,還是應該後臺緩衝區的寬度和高度來改變,或兩者,或其他什麼東西?

我很迷茫,沒有任何在線文檔足夠的技術詳細回答。一旦我理解了它,我應該可以編寫一些代碼,以便在調整屏幕大小時不發生任何事情,所有內容都保持相同的大小,並且右側/底部邊緣周圍有一個黑色區域,因爲窗口比我大渲染。

+0

目前無法檢查。但據我記憶,兩者都應調整大小。將背景緩衝區視爲「正在繪製的紙張」,而RenderTarget是「您要將已繪製的圖片投影到的平面」。所以如果你不想伸展,那麼你需要改變回緩衝區以在「紙張」上留出更多的空間,然後改變RenderTarget來實際上有一些「放置你的繪圖的地方」。 –

+0

所以我一個簡單的(示例)場景,你的後臺緩衝區應該有你計劃定位的最大尺寸。 –

+0

我知道你的意思,回到XNA還活着的那一天,很容易找到有關XNA教程的幫助,而不是MSDN上的框架參考主題。我能找到的最好的是[本文](https://msdn.microsoft.com/en-us/library/bb195022.aspx),縱橫比也有一些。希望它有幫助 – MickyD

回答

0

後臺緩衝區是顯示在屏幕上的特殊渲染目標。它被拉伸以填充窗口,如果窗口大小不匹配,會導致縮放。

當窗口大小改變時,您可以調整後臺緩衝區的大小。發生這種情況時會觸發Game.Window.ClientSizeChanged事件(請注意,如果用戶通過拖動來調整窗口大小,則可能會觸發多次)。然後調整後緩衝器僅僅是

GraphicsDeviceManager.PreferredBackBufferWidth = Window.ClientBounds.Width; 
GraphicsDeviceManager.PreferredBackBufferHeight = Window.ClientBounds.Height; 
GraphicsDeviceManager.ApplyChanges(); 

你是否應該重建RenderTarget取決於你使用它的是什麼。

+0

我希望能夠擴展輸出以適應窗口大小,但是可以將其打開/關閉作爲選項。有時我想讓它伸展,有時候我想渲染更多的屏幕(所以你會在遊戲中看到更多的「瓦片」)。據推測,兩者應該是相同的大小。我會試驗這個。 – NibblyPig