Página 1 de 1

Como melhorar minha trajetória nesse caso?

Enviado: Qui Mai 27, 2021 10:40 am
por Mysterious Stranger
Olá, pessoal.
Eu estou tendo uma dificuldade matemática (nenhuma novidade). Eu fiz um código para uma sprite caminhar pela room. A cada step, tanto x quanto y andam uma quantidade igual. Tipo x += 2 e y += 2. Isso provoca a seguinte trajetória (vermelha):
Imagem
Minha questão: como fazer para a trajetória ser como a linha verde? Ou seja, uma linha reta até o objetivo. Lembrando: se trata de uma sprite, não um objeto. Os passos alteram o x e y a cada step.

Re: Como melhorar minha trajetória nesse caso?

Enviado: Dom Jun 06, 2021 9:57 am
por Cataclysm185
Olá, você tem que calcular angulo entre o seu objeto e o alvo dele e depois apicar o seno (para o x) e o cosseno (para o y)

Exemplo:

Código: Selecionar todos

angulo = arctan2(xAlvo, yAlvo);         //passo 1
velocidadeX = sin(degtorad(angulo));    //passo 2
velocidadeY = cos(degtorad(angulo));    //passo 3
eu acho que assim vc ja vai ter um norte se der errado vc pode ir trocando o x e o y no passo 1 e os sinais nos passos 2 e 3.

Espero ter ajudado.

Re: Como melhorar minha trajetória nesse caso?

Enviado: Sex Jun 11, 2021 12:54 am
por Mysterious Stranger
Cataclysm185 escreveu:Olá, você tem que calcular angulo entre o seu objeto e o alvo dele e depois apicar o seno (para o x) e o cosseno (para o y)

Exemplo:

Código: Selecionar todos

angulo = arctan2(xAlvo, yAlvo);         //passo 1
velocidadeX = sin(degtorad(angulo));    //passo 2
velocidadeY = cos(degtorad(angulo));    //passo 3
eu acho que assim vc ja vai ter um norte se der errado vc pode ir trocando o x e o y no passo 1 e os sinais nos passos 2 e 3.

Espero ter ajudado.
Valeu, man. Vou testar amanhã mesmo e retorno dizendo se deu certo ou errado.

Re: Como melhorar minha trajetória nesse caso?

Enviado: Ter Jun 29, 2021 6:20 pm
por Mysterious Stranger
Tarde pra todos.
Finalmente teste seu código, Cataclysm.
Cataclysm185 escreveu:

Código: Selecionar todos

angulo = arctan2(xAlvo, yAlvo);         //passo 1
velocidadeX = sin(degtorad(angulo));    //passo 2
velocidadeY = cos(degtorad(angulo));    //passo 3
Do jeito q vc colocou não deu certo, mas eu fui adaptando como dava (como disse, matemática não é meu forte, mas sou bom com lógica). Troquei o calculo com radiano para grau e funcionou. Então cheguei nessa solução:

Código: Selecionar todos

if( pointDistance > 32 ){
      var pointDirection = point_direction(xdistPlayer, ydistPlayer, xdistTower, ydistTower);
      // calculo de como ir até o ponto
       var velocidadeX = sin(pointDirection) * 2; //passo 1
       var velocidadeY = cos(pointDirection) * 2; //passo 2
       xdistPlayer += velocidadeX;
       ydistPlayer += velocidadeY;
       scr_dataPlayers("SET", vgGame.etapa_player, "xposition", xdistPlayer);
       scr_dataPlayers("SET", vgGame.etapa_player, "yposition", ydistPlayer);
 }else{
       xdistPlayer = xdistTower;
       ydistPlayer = ydistTower;
       scr_dataPlayers("SET", vgGame.etapa_player, "xposition", xdistPlayer);
       scr_dataPlayers("SET", vgGame.etapa_player, "yposition", ydistPlayer);
       playerAction = 4;
 }
Valeu, man. Não teria chegado nesse código sem tua ajuda! Fica de referência para os outros. :sorrir: