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):
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.