0

私は Windows 10/Windows Phone (10) 用の UWP/UWA ゲームに取り組んでおり、Xbox One の開発モードを期待しています。今日開発者モードがリリースされたと聞いて興奮し、家に帰って Xbox でテストするのが待ちきれませんでした。

私のアプリ/ゲームは問題なく動作します。描画された領域が切り取られていることを除いて、(まだ)エラーは発生していません (「タイトルセーフ/テレビセーフ」領域の外側の外縁)。

Win2D CanvasSwapChain とジェネリック CoreWindow を使用しています。

この問題を軽減するために MyCoreWindow または MyViewSource でできることがあると思いますが、まだ答えが見つかりません。この時点での睡眠不足かもしれませんが、答えまたはそれを指す矢印が私自身と将来の探求者にとって大きな助けになることを願っています.

xamlを使用しないことをお勧めします。

これが私のViewコードです。

using Windows.ApplicationModel.Core;          
class MyViewSource : IFrameworkViewSource
{
    public IFrameworkView CreateView()
    {
        return new MyCoreWindow();
    }
}

これが MyCoreWindow です

class MyCoreWindow : IFrameworkView
{
    private IGameSurface _surface;
    private Engine _gameEngine;

    public void Initialize(CoreApplicationView applicationView)
    {
        applicationView.Activated += applicationView_Activated;
        CoreApplication.Suspending += CoreApplication_Suspending;
        CoreApplication.Resuming += CoreApplication_Resuming;
    }

    private void CoreApplication_Resuming(object sender, object e)
    {
        _surface.Resume(sender, e);
    }

    private void CoreApplication_Suspending(object sender, SuspendingEventArgs e)
    {
        _surface.Suspend(sender, e);
    }

    private void applicationView_Activated(CoreApplicationView sender, IActivatedEventArgs args)
    {
        Windows.UI.Core.CoreWindow.GetForCurrentThread().Activate();
    }

    public void Load(string entryPoint)
    {
        _surface.Load(entryPoint);
    }

    public void Run()
    {
        while (_gameEngine.IsRunning)
        {
            Windows.UI.Core.CoreWindow.GetForCurrentThread().Dispatcher.ProcessEvents(CoreProcessEventsOption.ProcessAllIfPresent);
            _surface.Update();
            _surface.Draw();
        }
    }

    public void SetWindow(Windows.UI.Core.CoreWindow window)
    {
        _surface = new Surface(window);
        _surface.SetFrameRate(60);
        _surface.SetUpdateRate(100);

        _gameEngine = new Engine(_surface.CanvasDevice);

        _surface.AddComponent(_gameEngine);
    }

    public void Uninitialize()
    {
        _surface.Unload();
    }

    public static void Main(string[] args)
    {
        CoreApplication.Run(new MyViewSource());
    }
}
4

1 に答える 1

1

XAML を使用せずに実行すると、グラフィックスをレンダリングするのはスワップチェーンだけなので、常に画面全体に表示されます。タイトル セーフ エリア内にのみ収まるようにスワップ チェーンをスケーリングするには、塗りつぶし中に画像をスケーリングおよび変換できる他のコンポジション システム (XAML または Windows.UI.Composition API など) への入力として、スワップ チェーンをフィードする必要があります。背景色の境界線。

CanvasDrawingSession.Transform を設定してレンダリングをスケーリングおよびオフセットし、さらに CreateLayer を使用してそれをクリップすることにより、Win2D スワップチェーンの選択したサブセットだけに描画できます。

ただし、通常は、タイトル セーフ エリアの外でもゲームを描画する方が適切です。このスペースの正確な表示範囲はテレビによって異なるため、単に黒のままにしておくと、一部のプレイヤーはゲームの周りに醜い黒い境界線が表示されます. この地域では、ゲームプレイに必要な重要なものを描画することはできません。他のプレイヤーにはまったく見えないためです。ただし、通常、重要でない背景グラフィックスは画面の実際の端まで拡張する必要があります。

(これは、TV ディスプレイ用のコンテンツを開発する際の厄介な問題の 1 つです)

于 2016-08-04T15:24:30.767 に答える