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.
2d
xna-4.0
resolution
AttackingHobo
fonte
fonte
Respostas:
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.
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.
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)
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.
fonte