Estive procurando uma fórmula para plotar azulejos isométricos (mundo-> tela) e escolher mouse (mundo-> tela) em um mundo em forma de diamante. Os que eu tentei sempre parecem estar bem. Qual é a maneira usual / correta de fazer isso?
23
Respostas:
Com base no seu comentário, eis o código que estou usando para converter os valores x, y do bloco em coordenadas na tela. Agora, ele não leva em conta "blocos 3d", tudo é considerado como estando no mesmo plano; portanto, se você estiver escrevendo um jogo onde isso importa, esse código não funcionará.
point é simplesmente uma estrutura contendo x e y ints, TILE_WIDTH seria 64 no seu caso, TILE_DEPTH é meio que mal nomeado (na verdade, é a altura dos gráficos do bloco), mas seria 32 no seu caso. As compensações são se você deseja que seu mapa de blocos "inicie" em um local x, y diferente (como se você deseja que os blocos estejam acima de outro conjunto de blocos). Normalmente, o deslocamento pode ser 0,0.
Isso irá gerar um mapa com 0,0 no topo, no meio, assim:
Quanto à localização do bloco x, y do cursor:
Nesse pedaço de código, mX e mY são as coordenadas da tela do mouse, que estamos combinando com os valores da câmera para descobrir onde estamos nas "coordenadas mundiais". Tudo o resto é igual ao exemplo de código anterior.
Mais uma vez, isso pressupõe um mapa de blocos 2D isométrico plano. Há algum trabalho adicional se você quiser usar uma visualização semi-3d do mapa, e tudo isso pressupõe que você esteja trabalhando em 2D de qualquer maneira.
fonte