Existe uma maneira fácil e razoável de implementar a livre circulação em um jogo isométrico baseado em blocos? Significa que o jogador não iria pular instantaneamente de um bloco para outro ou não ser "encaixado" na grade (por exemplo, se o movimento entre os blocos fosse animado, mas você não conseguiria fazer nada antes que a animação terminasse). Sou realmente iniciante em tudo relacionado à programação de jogos, mas com a ajuda deste site e de outros recursos, foi bastante fácil fazer as coisas básicas, mas não consegui encontrar recursos úteis para esse problema em particular .
Atualmente, improvisei algo próximo disso: http://jsfiddle.net/KwW5b/4/ (movimento WASD). A idéia para o movimento era usar o mapa do mouse para detectar quando o jogador mudou para um bloco diferente e, em seguida, inverter os desvios, e na maioria das vezes funciona corretamente (cada canto faz com que o jogador se mova para o local errado: veja http: //www.youtube.com/watch?v=0xr15IaOhrI , provavelmente porque não consegui fazer o mapa completo do mouse funcionar corretamente), mas não tenho ilusões de que ele esteja perto de uma solução boa / sã. De qualquer forma, é apenas para demonstrar que tipo de coisa eu gostaria de implementar.
fonte
Respostas:
Antes de tudo, sugiro que você altere as direções de: W - cima-esquerda S - baixo-direita A - baixo-esquerda D - superior-direita
em mais intuitivo: W - para cima S - para baixo A - esquerda D - direita
Quanto à sua preocupação, sugiro que você faça duas funções, uma traduzindo coordenadas isométricas de ladrilhos em coordenadas de grade e a segunda ao contrário. Dessa forma, você pode simplesmente separar o MVC e facilitaria sua vida ao calcular o bloco ativo:
fonte
Se eu entendi, você quer que o jogador mova ladrilhos em ladrilhos, mas sem pular. Você pode:
1- Comece com o bloco t0 e o deslocamento 0
2- Quando o jogador passa para o ladrilho t1, defina o deslocamento = - (t1 - t0)
3- Na atualização do jogador, se o deslocamento não for 0, diminua usando o tempo de atualização e a velocidade do jogador.
4- Você pode usar o deslocamento == 0 para saber quando o jogador está no ladrilho.
Com isso, você obtém um jogador que se move livremente no mapa, mas mantém as peças.
fonte