2012-09-06 136 views
0

基本上我想要做的是在最大化的窗口中居中放置一個800x600的遊戲。所以如果分辨率是1280x1024,會有一個大的邊框,但是如果分辨率是800x600,它將佔用整個屏幕設置小於窗口大小的遊戲大小

這是在Initialize方法中,它使得遊戲窗口具有固定的3D邊框的全屏,但是客戶區也調整大小以我已經嘗試設置首選後臺緩衝全屏

Form gameWindowForm = (Form)sys.Form.FromHandle(this.Window.Handle); 
gameWindowForm.FormBorderStyle = FormBorderStyle.Fixed3D; 
gameWindowForm.Text = ""; 
gameWindowForm.ControlBox = false; 
gameWindowForm.WindowState = sys.FormWindowState.Maximized; 

,clientbounds大小,視口和DISPLAYMODE。無論我嘗試調整大小,我要麼不能,因爲它是隻讀的,或者它不會改變任何東西。

任何幫助?

回答

2

如果您想自定義窗口布局,請嘗試official WinForms sample。 XNA沒有「官方」方式來混淆窗口內的客戶區域。

但是如果你想要做的是中心窗口內的描繪區域,那麼你應該能夠做到,只是通過設置視在每一幀的開始,像這樣:

int width = GraphicsDevice.PresentationParameters.BackBufferWidth; 
int height = GraphicsDevice.PresentationParameters.BackBufferHeight; 
GraphicsDevice.Viewport = new Viewport(
     width/2 - 800/2, height/2 - 600/2, 800, 600); 

(請注意,如果窗口太小且視口超出屏幕大小,則此代碼將失敗 - 因此,您需要檢查並響應 - 可能是使用較小的視口。)

請記住, GraphicsDevice.Clear將清除XNA 4.0中的整個backbuffer,而不僅僅是視口(所以只需繪製一個扁平的矩形acro視口)。

+0

你是在暗示將此代碼添加到Game.Draw()方法的開始? –

+0

是的,正是:) –

1

我已經使用rendertargets來解決過去的類似問題。 只需將您的場景渲染到渲染目標,然後將目標渲染到屏幕中心。

這也讓我很容易在視口周圍渲染一個「花哨」的邊框。

當您在渲染事件/方法中計算渲染目標的渲染位置時,您可以處理調整大小。

約rendertargets一些更多的信息:http://www.riemers.net/eng/Tutorials/XNA/Csharp/Series3/Render_to_texture.php