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!