Escolhendo a melhor resolução
Os jogadores fazem streaming de jogos para uma grande variedade de dispositivos, incluindo telefones, tablets, PCs e TVs. Eles vão de telas de baixa a alta resolução, e de monitores ultrawide 32:9 a tablets quadrados e dispositivos altos no modo retrato. Os jogadores preferem que o jogo preencha toda a tela ou janela, sem letterbox. Sempre que possível, a imagem também fica mais nítida se corresponder à tela do cliente sem dimensionamento. Por fim, a resolução ideal para um cliente pode depender das condições de hardware e de rede. A API XGameStreamingGetDisplayDetails leva todos esses fatores em consideração e retorna uma largura e uma altura “preferenciais”. Em condições ideais, a resolução “preferencial” é a resolução e a proporção da tela do cliente, mas, se essa resolução não for possível, será a resolução e a proporção mais próximas que se encaixem nas restrições do stream e nos parâmetros passados paraXGameStreamingGetDisplayDetails.
Se o seu jogo puder renderizar qualquer resolução, basta chamar XGameStreamingSetResolution e definir a resolução de renderização como a resolução preferencial para obter os melhores resultados.
Muitos jogos são projetados para um conjunto fixo de resoluções. Por exemplo, seu jogo pode ter uma versão para PC que oferece suporte a várias resoluções, mesmo que normalmente elas sejam reduzidas a uma no XBOX. Nesse caso, a Microsoft recomenda usar a resolução preferencial como guia para escolher a resolução mais próxima com suporte no seu jogo. Uma boa maneira de fazer isso é encontrar a correspondência mais próxima da proporção preferencial, para que o jogo preencha o máximo possível da tela do cliente. Observe que a estrutura XGameStreamingDisplayDetails inclui os limites das resoluções que você pode definir. Ela também inclui sinalizadores que indicam se o stream atual oferece suporte a resoluções não padrão e a dimensionamento na apresentação.
Se não for viável escolher a resolução automaticamente, mas a versão para PC do seu jogo incluir um seletor de resolução, você também poderá permitir que os jogadores escolham as resoluções, desde que elas se encaixem nas restrições de XGameStreamingDisplayDetails.
Escutar atualizações
Durante um stream, a melhor resolução pode mudar por vários motivos:- Nos servidores na nuvem, os jogos são iniciados antes que os clientes de streaming se conectem, portanto a resolução preferencial não fica disponível imediatamente.
- Um jogador com um telefone ou tablet pode girar o dispositivo entre os modos retrato e paisagem.
- Um jogador no PC pode redimensionar a janela do cliente de streaming ou alternar a tela inteira.
- As condições de rede podem mudar e exigir uma resolução de stream diferente.
XGameStreamingClientProperty::DisplayDetails) para detectar quando a resolução preferencial do cliente mudar. Quando esses eventos ocorrerem, altere a resolução para corresponder ao novo XGameStreamingDisplayDetails.
No mínimo, é muito importante tratar o evento de conexão inicial do cliente para jogadores em servidores na nuvem, a fim de obter uma resolução correspondente.
Limitações de alteração
A alteração da resolução do stream fica visível para os jogadores como um breve piscar (semelhante ao que pode acontecer ao alterar a resolução de um jogo em um PC). Para minimizar a interrupção, a Microsoft recomenda alterar a resolução apenas em resposta aos eventos acima. Além da experiência do jogador, não é recomendável alterar a resolução do stream mais de uma vez a cada 200 ms, pois talvez não haja tempo para o codificador de vídeo acompanhar a resolução do jogo, causando um breve estiramento visual. Os eventos acima não serão disparados mais de uma vez a cada 200 ms.Definindo parâmetros para XGameStreamingGetDisplayDetails
A APIXGameStreamingGetDisplayDetails inclui parâmetros para as restrições do seu jogo. Se eles forem definidos corretamente, a API calculará a melhor resolução que se encaixe nessas restrições. Os parâmetros são:
maxSupportedPixels: é a contagem total de pixels que seu jogo não deve exceder. Uma boa regra prática para manter o desempenho é multiplicar a largura e a altura que seu jogo normalmente renderizaria no tipo de dispositivo do sistema atual. Por exemplo, se o seu jogo normalmente renderizasse em 1440p no XBOX Series S, nesse tipo de dispositivo passe maxSupportedPixels=2560*1440=3686400.
widestSupportedAspectRatio e tallestSupportedAspectRatio: são os limites de proporção do seu jogo. Defini-los como as proporções mais largas e mais altas que você testou garantirá que seu jogo tenha boa aparência em todos os dispositivos.
Entrada por toque e resolução personalizada
Alterar a resolução por meio deXGameStreamingSetResolution altera o espaço de coordenadas da entrada por toque para corresponder à nova proporção. GameInputTouchState inclui coordenadas de toque em um intervalo normalizado de 0 a 1. Ao alterar a resolução, esse intervalo permanece o mesmo, mas passa a representar a nova resolução. Por exemplo, sem resolução personalizada em um jogo de 1920x1080, um toque em (0.5, 0.5) representa (960, 540), mas chamar XGameStreamingSetResolution para mudar para 1600x800 significa que um toque em (0.5, 0.5) representa (800, 400). Observe que os valores de resolução e proporção em GameInputTouchSensorInfo não são atualizados quando você altera a resolução; use os valores que você passou para XGameStreamingSetResolution, e não GameInputTouchSensorInfo, para calcular as posições de toque.
Área segura
Muitos dispositivos têm telas parcialmente obstruídas por entalhes, cantos arredondados e barras de deslizar sobrepostas.XGameStreamingDisplayDetails inclui um retângulo safeArea que descreve o retângulo desobstruído no centro da tela. Para garantir que o conteúdo importante fique visível, trate esse retângulo como os limites do espaço seguro do título. As áreas fora dele podem estar visíveis e ainda devem conter conteúdo, mas não elementos de interface do usuário importantes.
