2013-03-10 73 views
2

我正在編寫Windows 8遊戲,使用MonoGame 3.01和SwapChainBackgroundPanel與XAML集成。 我的資產針對16:9寬高比進行了優化,但由於Win8設備分辨率的差異,我還需要支持4:3。MonoGame支持多種分辨率Windows 8 XAML應用程序

目前我面臨以下問題:

  1. 拖動遊戲給第二監視器不調整屏幕

    _graphics.PreferredBackBufferWidth = (int)width; 
        _graphics.PreferredBackBufferHeight = (int)height; 
        _graphics.ApplyChanges(); 
    

在SwapChainBackgroundPanel(GamePage)I至大小發生反應改變

void GamePage_SizeChanged(object sender, SizeChangedEventArgs e) 
    { 
     Game.SetBackBuffer(e.NewSize.Width, e.NewSize.Height); 
    } 

但沒有任何反應,似乎只有初始化(遊戲初始化後)後臺緩衝區更改已應用。

  1. 有沒有辦法保留高寬比而不是拉伸填充,例如。通過信箱?

在Windows 8上支持多種分辨率(包括Snapped視圖)的最佳做法是什麼?

編輯:只是爲了澄清 - 正在執行GamePage_SizeChanged它只是_graphics.ApplyChanges(),似乎沒有任何效果

回答

0

你爲什麼不嘗試添加客戶端大小更改事件到你的遊戲構造。

例子:

public Game1() 
{ 
    _graphics = new GraphicsDeviceManager(this); 
    this.Windows.ClientSizeChanged += Window_ClientSizeChanged; 
} 

void Window_ClientSizeChanged(object sender, EventArgs e) 
{ 
    int currentWidth = this.Window.ClientBounds.Width; 
    int currentHeight = this.Windows.ClientBounds.Height; 
} 

您還可以添加的事件處理程序ApplicationViewChanged由ViewChangeArgs比較在Windows8中的ApplicationViewState枚舉檢測啪的一聲,滿了,滿ViewStates。您可以從_graphics.SwapChainPanel屬性訪問遊戲的SwapChainBackgroundPanel。最後,你也有_graphics.GraphicsDevice.DisplayMode具有AspectRatio,高度,寬度。

+0

謝謝,我知道在哪裏對大小變化做出反應,但問題是更改PreferredBackBufferWidth沒有效果。我不知道如何在不進行手動轉換的情況下製作內容縮放比例保持高寬比 。 – 2013-03-11 11:20:58

+1

對於Windows 8,PreferredBufferWidth在MonoGame中預設爲1366,760。您可以訪問當前的GraphicDevice和事件處理程序的開始和結束DeviceChanging,以便您可以在那裏更改設備大小。讓我測試在我的遊戲中改變這一點,我會發布代碼。 – Taraew 2013-03-11 20:08:42