2016-08-03 3 views
0

J'ai travaillé sur un jeu UWP/UWA pour Windows 10/Windows Phone (10) et j'ai anticipé le mode Dev pour Xbox One. J'étais excité d'entendre parler de la sortie du mode dev aujourd'hui et je ne pouvais pas attendre pour rentrer à la maison et le tester sur ma Xbox.Redimensionner Win2D CanvasSwapChain pour CoreWindow sur XBOX One avec C# (NO XAML)

Mon application/jeu fonctionne très bien, je rencontre pas d'erreur (encore) en dehors de la zone tirée clipsage (bord extérieur de l'extérieur « titlesafe/TV en toute sécurité » région).

J'utilise un Win2D CanvasSwapChain et un CoreWindow générique.

Je me sens comme il y a quelque chose que je peux faire avec le MyCoreWindow ou MyViewSource pour atténuer ce problème, mais ne l'ai pas trouvé la réponse encore. C'est peut-être le manque de sommeil à ce moment-ci, mais j'espère qu'une réponse ou une flèche qui y apparaîtrait serait d'une grande aide pour moi-même et pour les futurs chercheurs.

Je préférerais ne pas utiliser XAML.

Voici mon code View.

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

Et c'est le 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()); 
    } 
} 

Répondre

1

Lorsque vous exécutez sans XAML, votre swapchain est la seule chose rendu graphique, il remplit toujours l'écran. Pour que la swapchain s'adapte uniquement à l'intérieur de la zone de sécurité du titre, vous devez l'alimenter en entrée d'un autre système de composition (XAML ou API Windows.UI.Composition) qui peut redimensionner et traduire votre image tout en remplissant dans les frontières avec une couleur de fond.

Vous pouvez dessiner à un sous-ensemble sélectionné de votre swapchain Win2D en définissant CanvasDrawingSession.Transform pour redimensionner et compenser votre rendu, ainsi qu'en utilisant CreateLayer pour le découper.

Il est généralement préférable pour les jeux à tirer même en dehors du titre zone de sécurité, cependant. Exactement combien de cet espace est visible différera d'un téléviseur à l'autre, donc si vous le laissez juste noir, certains joueurs verront des bordures noires laides autour de votre jeu. Vous ne pouvez pas dessiner des éléments importants qui sont nécessaires pour le gameplay dans cette région, car les autres joueurs ne le verront pas du tout, mais vous souhaiterez généralement que les graphismes d'arrière-plan non essentiels s'étendent jusqu'au bord réel de l'écran.

(c'est l'une des nuisances du développement de contenu pour les écrans de télévision)