Estou trabalhando em um jogo que envolverá hexágonos de suspiro .
No momento, tenho uma imagem hexagonal que estou usando (todos os lados têm o mesmo comprimento ... cabe em uma imagem de 50 por 50 pixels).
Eu sou um pouco novo em C # e realmente novo em XNA, mas existe algum tipo de método fácil que posso chamar em vez de fazer uma declaração if complicada com base em pontos e ângulos?
c#
xna
hexagonal-grid
te
fonte
fonte
Respostas:
Um hexágono é um retângulo com cantos cortados. A maneira como eu vi isso e ouvi a série Civilization fazer dessa maneira com mapas ortogonais é criar um bitmap com um espaço em branco (ortogonal ou hexagonal) e um vermelho, verde, azul e amarelo canto. (Ou as cores que você preferir.)
Hexagonal: ou
Ortogonal:
Em seguida, determine qual retângulo está o cursor e teste a cor do pixel nesse local. Se é branco, eles estão pairando sobre esse espaço. As outras cores são mapeadas para um deslocamento e, em vez disso, passam o mouse sobre esse hexágono. Dessa forma, é eficiente, requer pouca geometria e pode ser usado para qualquer espaço arbitrário em mosaico.
fonte
Não existe um método XNA que faça um teste de impacto hexagonal.
Este artigo explica como escrever uma função que faz o teste e fornece a função:
Como verificar se um ponto está dentro de um hexágono
Aqui está um resumo desse artigo:
E a função que faz o teste é assim:
isInside
teste para o quadrante local.Veja o artigo para detalhes completos.
Aqui estão algumas outras fontes relacionadas úteis:
Coordenadas em mapas de blocos baseados em hexágono
Existe um ponto dentro de um hexágono regular?
fonte
Aqui eu tenho um método que pode ser usado para detectar cliques dentro de qualquer polígono:
Você precisa fornecer os cantos do seu hexágono em um vetor2 (poli) e a posição clicada (p) para o método.
fonte