2d mapa top-down: normalização ou não?


11

Eu sou um iniciante absoluto em programação de jogos, caso essa pergunta seja mal formulada, esteja ciente de que não foi uma negligência ao meu lado, mas falta de experiência em programação de jogos.

O jogo que estou planejando codificar usará um mapa 2D de cima para baixo como "mundo". O mundo pode ser maior que a janela (a janela pode aumentar ou diminuir o zoom) e os veículos podem estar localizados em qualquer ponto do mundo (= não é um mapa lado a lado, o espaço é "contínuo").

Para esclarecer com um exemplo: se o mundo é um terreno de 1000x1000 metros, um veículo pode estar no local (327,31, 720,4) metros.

Minha pergunta é: qual é a maneira mais conveniente de representar o mundo internamente? Eu poderia pensar nessas possibilidades:

  • não faça nada e use medidores como se eu estivesse trabalhando com o objeto físico,
  • normalize para pixels, definindo o tamanho do mundo como o número de pixels para representar 1000 metros com zoom máximo,
  • normalize para 1 definindo a palavra como um quadrado de tamanho 1

... mas tenho certeza de que pode haver outros / alguns dos quais não fazem sentido. É que, sendo o meu primeiro jogo, não tenho uma imagem clara dos problemas à minha frente e gostaria de algumas orientações para fazer uma escolha inicial razoavelmente correta.

Obrigado pelo seu tempo.


Eu tive esse problema. Não vou postar como resposta - já existem ótimas coisas lá. Mas se você trabalha em alguma unidade arbitrária, pode suportar qualquer resolução apenas ajustando um único valor. Também é muito mais fácil lidar em termos de jogabilidade. Finalmente, com grandes números, como medições de pixel, os sims de física podem explodir.
The Duck comunista

Respostas:


10

Concordo em usar um valor do mundo real (metros, pés, etc.) como sua base para a distância. O problema com suas outras duas sugestões é que ambas são variáveis. Trabalhar com tamanho mundial 1fará com que toda a sua aritmética seja de ponto flutuante entre -1 e 1, o que pode levar a mais erros de ponto flutuante. Além disso, se você decidir criar tamanhos de mundo variáveis ​​(mundos "grandes" para jogos mais longos etc.), você apresentará muitos problemas ao seu código. Da mesma forma, se você usar pixels, mesmo com um nível de zoom máximo / mínimo, você ficará confuso e terá problemas caso decida aumentar ou diminuir os níveis de zoom.


Esta resposta é excelente (+1). Eu particularmente gosto de como você explicou os possíveis problemas com o uso de "1" para o tamanho do mundo.
Randolf Richardson

Se você estiver fazendo algum tipo de simulação física, mesmo que totalmente inventado, o uso de números inteiros de ponto fixo acabará causando resultados inválidos. Tudo o que você precisa fazer é modelar um único veículo movendo-se na velocidade unitária na diagonal e você descobrirá que não tem como representar adequadamente sua posição.
edA-qa mort-ora-y

3
ER acordado: usando medidores. Isso também irá ajudá-lo a visualizar e entender as coisas mentalmente. "Esse veículo tem 5 metros de comprimento" ou "Esses dois objetos estão a 500 metros de distância" e não precisa fazer matemática mental o tempo todo para ter uma ideia do que você está fazendo.
Tim Holt

-1 essa afirmação sobre inteiro estar aritmética mais rápido do ponto flutuante não é verdade, em geral, na verdade, eles são muito mais rápidos na maioria das plataformas modernas
Maik Semder

2
Ainda usar valores de ponto fixo para posições absolutas pode ser uma boa ideia. Isso leva a precisão constante e física idêntica em todo o mundo.
CodesInChaos 16/07

7

Das três opções que você sugeriu, o uso de medidores provavelmente será o melhor. À medida que você cria outros dados, lidar com o comprimento em metros facilitará sua vida. Entre outras razões, você pode decidir alterar o tamanho do mundo ou níveis diferentes podem precisar de mapas de tamanhos diferentes.

Você também pode optar por usar pés (ou possivelmente polegadas). Parte dessa decisão pode depender de quais pacotes de middleware você usa - alguns mecanismos de física preferem um tipo de unidade ou outro (embora quase sempre seja configurável). Na maioria das vezes, você pode simplesmente escolher uma unidade e seguir em frente.


5

Normalizar para '1' não é realmente o caminho a seguir (e se você tiver um mundo não quadrado? Ou vários mundos com tamanhos diferentes ...).

Usando pixels como ... NUNCA misture jogabilidade e medidas gráficas !! Não se tranque para não mudar os gráficos sem precisar alterar o código.

Portanto, metros (pés ou qualquer medida que você mais gosta) é o caminho a percorrer. Você se sentirá muito melhor codificando seu lançador de mísseis para se mover a 50 km / h do que 0.00076 unidades / segundo ...

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.