Obrigado por visitar a The Game Makers Brasil 😁 Use o fórum de Dúvidas para fazer perguntas. Se está em busca de aprender dê uma olhada nos tutoriais.

Como melhorar minha trajetória nesse caso?

Perguntas? A comunidade te ajuda a resolver.
Avatar do usuário
Mysterious Stranger
Artista
Artista
Reações: 0
Mensagens: 62
Localização: BH

Contato:

Como melhorar minha trajetória nesse caso?

Mensagem por Mysterious Stranger » Qui Mai 27, 2021 10:40 am

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.

Avatar do usuário
Cataclysm185
Novato
Novato
Reações: 0
Mensagens: 1

Re: Como melhorar minha trajetória nesse caso?

Mensagem por Cataclysm185 » Dom Jun 06, 2021 9:57 am

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.

Avatar do usuário
Mysterious Stranger
Artista
Artista
Reações: 0
Mensagens: 62
Localização: BH

Contato:

Re: Como melhorar minha trajetória nesse caso?

Mensagem por Mysterious Stranger » Sex Jun 11, 2021 12:54 am

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.

Avatar do usuário
Mysterious Stranger
Artista
Artista
Reações: 0
Mensagens: 62
Localização: BH

Contato:

Re: Como melhorar minha trajetória nesse caso?

Mensagem por Mysterious Stranger » Ter Jun 29, 2021 6:20 pm

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:

Responder

Quem está online

Usuários navegando neste fórum: Nenhum usuário registrado e 3 visitantes