Esses jogos que não têm a sorte de rodar em uma especificação de plataforma bloqueada, como computadores de mão, precisam rodar em vários formatos de resolução e proporções.
Em um jogo em 3D, você pode ter um HUD ou GUI de menu com base em gráficos de varredura, e em um jogo em 2D, você pode ter um monte de quads que são embarcações para sprites.
Então, minha pergunta é: como você aborda o design e a operação de conteúdo em várias resoluções e proporções? Vamos supor que você tenha um personagem de sprite de 300 x 400 pixels e cercado por um nível de blocos. Em diferentes resoluções / proporções, você verá um FOV completamente diferente. Ou, se você possui um menu HUD ou GUI, você deseja manter algumas coisas nas mesmas posições e tamanho do mesmo em relação à tela. No entanto, a fonte gráfica é bitmaps rasterizados, não vetoriais.
Obviamente, o problema foi abordado várias vezes. Estou interessado em ouvir várias abordagens que funcionaram para você até agora. Você mantém uma unidade arbitrária de pixel de dimensão arbitrária que você transforma magicamente em dimensões necessárias por meio de fórmula baseada em res e proporção ou em outras abordagens?
editar:
Portanto, a conclusão é enumerar suas proporções. Menor combinação de aspectos: a resolução é aquela em que você cria coisas importantes. Uma área segura, se você preferir. As mesmas proporções, mas resoluções mais altas são simples problemas de dimensionamento. O conteúdo artístico foi desenvolvido para a mais alta resolução. As proporções maiores simplesmente mostram mais de nível / FOV com as informações apresentadas que não são críticas, como é a área segura. Algo como nesta imagem que fiz .
Respostas:
Se suas resoluções forem semelhantes umas às outras, você pode simplesmente usar a mesma arte em todas elas, talvez com algum downscaling em tempo de execução para as telas menores. Se eles diferem mais do que o fator 2x, digamos, você precisará criar (ou pelo menos ter um ajuste no artista) recursos separados para as diferentes resoluções.
Com o 2D, a resolução afeta bastante a maneira como você cria imagens. Um sprite que pareça ricamente detalhado e realista em alta resolução será enlameado e indecifrável em escala reduzida. Da mesma forma, um sprite limpo e nítido olhando para baixa resolução parecerá barato e excessivamente simples em alta resolução.
fonte
Uma maneira é criar os ativos de imagem em um formato vetorial (SVG, Illustrator etc.) e convertê-los em imagens raster, conforme necessário pelas diferentes versões do jogo.
fonte
Ao manter a tela cheia em diferentes resoluções, se você deseja a perfeição em pixels (ou seja, "Como o artista a produziu"), o problema é que não há uma maneira totalmente automatizada de escalar sprites para cima ou para baixo (ou girá-los) que não não requer aprovação humana. Em última análise, é porque o posicionamento dos pixels é uma coisa subjetiva. O algoritmo de renderização realiza algumas redimensionamentos ou rotações e precisa usar algumas técnicas de aproximação para fazer isso, por exemplo. filtragem bilinear. Se você ainda quer arestas duras sobre os pixels para ter que "a perfeição do pixel" (ou seja, não usando AA ou BF), então você vai ter que aceitar que a escala por algum grau não-potência de 2 está indo para produzir alguns artefatos indesejáveis.
Uma abordagem interessante para um problema semelhante é encontrada no RotSprite , um aplicativo / algoritmo projetado para executar rotações "automáticas" de sprites. Com isso, quero dizer que produz uma série de resultados finais possivelmente desejáveis após processamento intensivo, para o operador humano escolher. Os sprites escolhidos a dedo acabam entrando no jogo, o que significa que essa é uma etapa de criação de conteúdo, e não de execução.
Uma resposta possível à sua pergunta "pixel agnóstico de dimensão mágica arbitrária": o OpenGL (que você pode estar pretendendo usar se estiver usando uma plataforma cruzada) funciona de uma maneira totalmente diferente de um renderizador de varredura de software. Ele considera a largura e a altura da tela no intervalo de ponto flutuante de 0,0 a 1,0 e mapeia os pixels de acordo na GPU. Claro que isso pode resultar em artefato, a menos que, por exemplo. O BF está ativado para texturas (que são seus sprites no OpenGL).
fonte