Renderização 2D independente de resolução no XNA

7

Estou tentando descobrir a melhor maneira de renderizar um jogo 2D em qualquer resolução.

Atualmente, estou processando o jogo em 1920x1200. Estou tentando dimensionar o jogo para qualquer resolução selecionada pelo usuário sem alterar a maneira como estou renderizando ou a lógica do jogo.

Qual é a melhor maneira de dimensionar um jogo para qualquer resolução arbitrária?

Edit: Estou tentando conseguir isso:

http://www.david-amador.com/2010/03/xna-2d-independent-resolution-rendering/

mas acho que o código que ele tem é para uma versão diferente do XNA porque não consigo encontrar a sobrecarga de método que ele usa.

AttackingHobo
fonte
11
Tenha alguma resolução como padrão e desenhe tudo em uma escala de dimensões originais * (resolução do usuário / resolução padrão)?
O pato comunista
11
Você está procurando a sobrecarga SpriteBatch.Draw? Se você estiver usando o XNA 4.0, precisará usar este para a matriz de transformação: msdn.microsoft.com/en-us/library/ff433701.aspx É o último argumento. Da próxima vez, tente especificar o código real.
Michael Coleman
Lendo o código de exemplo, consegui que ele mudasse apenas uma linha na função Draw - os parâmetros para SpriteBatch.Begin foram alterados na versão 4.0: spriteBatch.Begin (SpriteSortMode.Immediate, BlendState.AlphaBlend, null, null, null, null , Resolution.getTransformationMatrix ());
Leniência
Você também pode renderizar para um destino de renderização e apenas escalá-lo. Apenas outra maneira de fazer isso. (não tenho muita certeza da eficiência) Não acho que seria um problema terrível.
Michael Coleman

Respostas:

4

Editar:

Você está procurando a chamada SpriteBatch.Draw (Texture2D, Rectangle, Color) . O retângulo representa o destino de desenho em escala na tela.

Estou assumindo aqui que você não está usando um layout de grade - não foi especificado na pergunta, por isso irei com os recursos que podem ser desenhados em qualquer pixel, em vez de em uma grade definida.

  1. Primeiro, decida qual deve ser a resolução 'nativa'. Provavelmente apenas a altura, monitores diferentes têm proporções diferentes, de modo que isso deve ser levado em consideração. Vamos escolher 1200 como a altura nativa. Todo o dimensionamento será baseado nesse número.

  2. Digamos que eu esteja executando o jogo na minha TV com apenas 720p - 60% da altura. Todas as coordenadas da unidade e os tamanhos do retângulo devem ser multiplicados por 0,6. Uma unidade orc hipotética tem 20 pixels de altura e está localizada em (50,45) sob resolução nativa. Na hora do desenho, o retângulo de destino se tornaria 12 pixels de altura e desenhado em (30, 27)

  3. Onde exatamente você calcula na escala pode ser um problema. Você pode executar o jogo inteiramente como se estivesse executando em resolução nativa - isso significaria nenhuma escala extra em coisas como cálculos de distância, velocidade de animação e interpolação, etc. cliques do mouse. Se você optou por escalar tudo, basta tornar essa escala acessível a todos os sistemas globalmente e lembre-se de prestar contas.

Espero que isso responda melhor à sua pergunta.

Clemência
fonte
Quero escalar meu jogo sem precisar desenhá-lo de maneira diferente. Você acabou de me dizer como alterar a resolução. Se eu mudar a resolução, não mudará a escala, apenas o tamanho do jogo, que é o que eu não quero.
AttackingHobo
Ah, entendi. Eu entendi mal o que você estava perguntando. Edição de resposta para resolver isso.
Leniência
11
Eu editei minha pergunta. Eu quero ser capaz de tornar tudo igual em todos os sistemas, mas escalá-lo após o fato.
AttackingHobo