Solucionado (ver solução)
Solucionado
(ver solução)
3
respostas

Zumbi só anda nas diagonais

Se observamos, nessa implementação o Zumbi só anda nas diagonais e quando alcança o jogador continua fazendo pequenos movimentos. Isso acontece porque a cocos quando entrega a posição do alvo (jogador) para o Zumbi, retira as casas decimais do x e y do vetor gerando uma pequena diferença no cálculo de subtração com a posição do Zumbi, que possui as casas decimais. Ou seja, a posição do próprio node possui as casas decimais e a posicao de nodes recebidos via getComponent não possuem. Resolvi o problema alocando dois novos vetores sem a parte decimal, pois a classe Vec2 não fornece nenhum método de arredondamento.

O que fiz para solucionar:

// Método update(dt) da classe Zumbi:
    let vetorRoundedZumbi = cc.v2(Math.trunc(this.node.x), Math.trunc(this.node.y));
    let vetorRoundedAlvo = cc.v2(Math.trunc(this.alvo.x), Math.trunc(this.alvo.y));
    let direcao = vetorRoundedAlvo.sub(vetorRoundedZumbi);

Existe alguma outra forma de resolver isto?

Grato!

3 respostas

Oi Jorge, tudo bom?

Não entendi exatamente o seu problema. No curso o zumbi anda na direção da jogadora, independente se essa direção for ortogonal e diagonal.

Olá Ricardo! Se observamos bem, mesmo quando o Zumbi está andando somente para a esquerda, a animação exibe esquerdaCima ou esquerdaBaixo. A mesma coisa acontece quando anda somente para cima, para baixo e para direita. Ou seja, não carrega as animações das direções ortogonais para o Zumbi, somente para o jogador.

solução!

Ahh, entendi. Sim isso acontece mesmo. Em um curso mais pra frente resolvemos isso. Acho que é na parte 5 desse curso.

O que eu fiz para resolver esse problema é colocar uma folga no angulo necessário para disparar essas animações.

Por exemplo se o angulo entre o zumbi e a jogadora for menor do que 20 graus, disparo a animação AndaDireita. Se esse angulo for maior do que o 160 e menor do que 200 disparo a animação AndaEsquerda e assim por diante.