Seguindo a questão das proporções , estou interessado em ouvir o que outras pessoas estão usando ao trabalhar em sistemas de interface do usuário 2D (provavelmente suas próprias soluções caseiras). Especificamente, como você lida com sistemas de coordenadas. Na minha opinião, existem três opções:
- Coordenadas codificadas (por exemplo: 0 -> 720, 0 -> 576)
- Coordenadas normalizadas (0,0 -> 1,0, 0,0 -> 1,0), mapeadas em coordenadas reais antes da renderização
- Coordenadas virtuais (por exemplo: 0 -> 1600, 0 -> 1000), mapeadas em coordenadas reais antes da renderização
O código embutido é obviamente útil apenas se você estiver em uma plataforma fixa e souber quais são as coordenadas do espaço da tela com antecedência ou se estiver preparado para criar layouts de tela para todos os conjuntos possíveis de dimensões da tela.
As coordenadas normalizadas são boas, mas sofrem de ambiguidade quando a proporção da tela não é fixa (por exemplo, 0,75 mapeia para uma coordenada física diferente ao executar em widescreen do que em 4: 3). Além disso, para os autores, é realmente contra-intuitivo declarar que um elemento da interface do usuário é (0,2 x 0,2), apenas para descobrir que ele não é realmente quadrado quando renderizado.
As coordenadas virtuais são inequívocas, mas sofrem dos mesmos problemas que as coordenadas normalizadas no estágio de remapeamento: uma pequena discrepância decimal pode resultar em erros individuais, o que significa que os elementos da interface do usuário que devem ser colocados lado a lado agora têm uma costura entre eles.
Da mesma forma, quando você tem uma tela de resolução fixa, as coordenadas normalizadas e virtuais significam que é muito difícil garantir um mapeamento 1: 1 entre os pixels finamente criados pelo artista na imagem da interface do usuário e os pixels na tela, o que significa que você corre o risco de artefatos de escala desagradáveis (supondo que você esteja renderizando como quads texturizados na tela).
Adotamos a abordagem de coordenadas virtuais, especificamente para evitar ambiguidade em relação às proporções. Portanto, ao renderizar em uma tela 16:10, o espaço da interface do usuário é (0,0) -> (1600,1000), mas ao renderizar para 4: 3, o espaço da interface do usuário utilizável é realmente (133,0) -> (1467 0).
Existem soluções melhores que eu simplesmente não conheço? Existem boas estratégias para minimizar os problemas dessas três abordagens?
Depende muito do tipo de jogo e da situação. Para protótipos rápidos e sujos, prefiro planejar a interface do usuário em papel milimétrico, escrever uma lista de coordenadas numéricas para um tamanho fixo de janela e codificar tudo - é mais fácil e rápido para mim. Mas para um projeto "real" em que você desejaria janelas redimensionáveis ou resoluções de tela alternativas, isso obviamente não seria o ideal, e seria melhor algum tipo de solução que permita o dimensionamento em ambas as direções.
fonte