0

現在、Win 8 Windows ストア ゲーム (Monogame、C#) に取り組んでいます。graphics.PreferredBackBuffers を 1366x768 に設定しました。私が主に開発に使用しているラップトップは、この解像度をサポートしておらず、それに接続されている外部モニターもサポートしていませんが、すべてが適切にスケーリングされるため、スプライトは別のモニターで圧縮または引き伸ばされます (ゲームがドラッグされた場合、これは保持されません)。実行中の別のモニター)。マウスを使用してゲームオブジェクトをドラッグする必要がありますが、マウスカーソルがモニターの解像度で機能することに気付いたので、次のようにします:

 if(objectSprite.BoundingBox.Contains((int)mouseCursos.x, (int)mouseCursos.Y))
 {
        objectSprite.isHooked = true;
 }

マウスの座標は常にゲーム オブジェクトの座標とは異なるため、動作しません。座標をスケーリングできるように、現在のモニターの最大解像度を取得するにはどうすればよいですか。

GraphicsAdapter.DefaultAdapter.CurrentDisplayMode は 800x600 を返すことに注意してください。

4

2 に答える 2

1

Metro アプリは通常、デフォルトで全画面表示になっているため (スナップすることもできます)、Window クラスの次のプロパティを使用できます。

Window.ClientBounds.Width
Window.ClientBounds.Height

それが役立つことを願っています。

于 2013-06-18T18:53:39.513 に答える
0

私のモノゲーム Windows ストア アプリでは、ClientBounds が何らかの形で存在せず、Window.Current が何らかの形で null であるため、次のアプローチを使用します。

            CoreApplicationView v = Windows.ApplicationModel.Core.CoreApplication.MainView;
        var bounds = v.CoreWindow.Bounds;
        double w = bounds.Width;
        double h = bounds.Height;
        switch (DisplayProperties.ResolutionScale)
        {
            case ResolutionScale.Scale140Percent:
                w = Math.Round(w * 1.4);
                h = Math.Round(h * 1.4);
                break;
            case ResolutionScale.Scale180Percent:
                w = Math.Round(w * 1.8);
                h = Math.Round(h * 1.8);
                break;
        }
        ScreenSize resolution = new ScreenSize(w, h);
        if (ApplicationView.Value == ApplicationViewState.FullScreenLandscape)
            resolution = new ScreenSize(w, h);
        else if (ApplicationView.Value == ApplicationViewState.FullScreenPortrait)
        {
            resolution = new ScreenSize(h, w);
        }
        else if (ApplicationView.Value == ApplicationViewState.Filled)
        {
            resolution = new ScreenSize(w + 320.0 + 22.0, h); //snapped mode grip
        }
于 2014-02-28T18:15:26.227 に答える