Página 1 de 1

Como fazer o path se mover junto com o personagem

Enviado: Sáb Jan 14, 2017 2:39 am
por Koreha
       Estou trabalhando em um jogo de plataforma em que o ataque do protagonista é invocar uma espada que se move em um arco. Esse arco é um path utilizado no evento Create da espada. 
       O problema é que a espada fica defasada em relação ao movimento do jogador, ou seja, o path fica no mesmo lugar enquanto o player se mexe. Gostaria que saber como fazer o path se mover junto do personagem.

Re: Como fazer o path se mover junto com o personagem

Enviado: Sáb Jan 14, 2017 8:27 am
por Mateus
Bom dia caro colega,
Imagino que essa espada criada seja um objeto, não?
Por que não faz com que o ponto de origem dessa espada não tenha o diâmetro do arco que você quer e então faça ela um parente do player e gire ela no ângulo desejado.
Acho que dessa forma você vai conseguir o efeito desejado caso não seja possível mover o path.
Bom, vamos aguardar novas dicas.
Espero ter conseguido ajudar.

Re: Como fazer o path se mover junto com o personagem

Enviado: Sáb Jan 14, 2017 10:58 am
por Koreha
Mateus escreveu:Bom dia caro colega,
Imagino que essa espada criada seja um objeto, não?
Por que não faz com que o ponto de origem dessa espada não tenha o diâmetro do arco que você quer e então faça ela um parente do player e gire ela no ângulo desejado.
Acho que dessa forma você vai conseguir o efeito desejado caso não seja possível mover o path.
Bom, vamos aguardar novas dicas.
Espero ter conseguido ajudar.
Agradeço pela ajuda. Mas acho que isso não é possível.
A espada não só gira como se move também. Ela realiza os dois movimentos : muda-se seu image_angle a cada step, enquanto ela segue a trajetória de arco do path.

Re: Como fazer o path se mover junto com o personagem

Enviado: Sáb Jan 14, 2017 11:11 am
por Koreha
Segue GIF mostrando o que ocorre: quando o jogador anda ele fica na frente da espada.
Imagem

EDIT: GIF com melhor qualidade.

Re: Como fazer o path se mover junto com o personagem

Enviado: Sáb Jan 14, 2017 12:17 pm
por Dust
Você pode definir a posição da espada no step com um x=player.x+valor_x, assim a espada sempre ficara de frente ao objeto.
Porém, creio que o movimento do patch que possa estar dando esse efeito, talvez lá no patch você esteja tacando a espada pra frente e logo depois pra tras, como um arco, ai possa estar dando essa impressão. O caminho de um Patch sempre vai estar acima de um outro movimento, a execuçao dele é obrigatória, eu acho kkk.
Flw!

Re: Como fazer o path se mover junto com o personagem

Enviado: Sáb Jan 14, 2017 12:29 pm
por Koreha
Dust escreveu:Você pode definir a posição da espada no step com um x=player.x+valor_x, assim a espada sempre ficara de frente ao objeto.
Porém, creio que o movimento do patch que possa estar dando esse efeito, talvez lá no patch você esteja tacando a espada pra frente e logo depois pra tras, como um arco, ai possa estar dando essa impressão. O caminho de um Patch sempre vai estar acima de um outro movimento, a execuçao dele é obrigatória, eu acho kkk.
Flw!
Está tudo certinho com o path. O problema é que ele fica parado enquanto o personagem se mexe, por isso que o player fica em cima da espada.

Re: Como fazer o path se mover junto com o personagem

Enviado: Sáb Jan 14, 2017 12:44 pm
por Dust
Bem... Então acontence que o path é o único movimento que pode ser executado, o path irá bloquear qualquer outro movimento que esteja sendo executado no step.
Crie o movimento da espada sem um path, crie um caminho que a espada iria percorrer por step.
Assim ela sempre vai poder estar a frente do player e seguindo ele sem problemas.
Eu fico escrevendo patch sem quere kk

Re: Como fazer o path se mover junto com o personagem

Enviado: Sáb Jan 14, 2017 12:55 pm
por Koreha
Dust escreveu:Bem... Então acontence que o path é o único movimento que pode ser executado, o path irá bloquear qualquer outro movimento que esteja sendo executado no step.
Crie o movimento da espada sem um path, crie um caminho que a espada iria percorrer por step.
Assim ela sempre vai poder estar a frente do player e seguindo ele sem problemas.
Eu fico escrevendo patch sem quere kk
E como eu poderia fazer isso? Ela faz um movimento em arco, acho que o único jeito seria usando equações da circunferência mas não faço ideia de como usar.

Re: Como fazer o path se mover junto com o personagem  Tópico resolvido

Enviado: Ter Jan 17, 2017 12:12 pm
por saim
Como o path é simples, a solução de definir os pontos e variáveis da imagem (image_angle) a cada step é simples, tembém. Se você tem um centro, uma distância e um ângulo, o assunto está encerrado

Código: Selecionar todos

cx = ? // coordenada "x" do centro (provavelmente, as coordenadas do personagem)
cy = ? // coordenada "y" do centro
ang = ? // ângulo da espada
dist = ? // distância do personagem à espada

x = cx + lengthdir_x(dist, ang);
y = cy + lengthdir_y(dist, ang);

image_angle = ang;
Você pode escolher quais variáveis dependem da posição do personagem, sendo que cx e cy certamente dependerão.
Agora, paths mais complexos também podem usar equações. Uma vez, eu fiz umas orbes que circulavam ao redor do personagem, com a depth variando em função dela estar indo ou voltando. Dá muito trabalho e requer uma boa dose de conhecimentos matemáticos, mas o resultado costuma valer a pena.

Re: Como fazer o path se mover junto com o personagem

Enviado: Ter Jan 17, 2017 1:46 pm
por Koreha
saim escreveu:Como o path é simples, a solução de definir os pontos e variáveis da imagem (image_angle) a cada step é simples, tembém. Se você tem um centro, uma distância e um ângulo, o assunto está encerrado

Código: Selecionar todos

cx = ? // coordenada "x" do centro (provavelmente, as coordenadas do personagem)
cy = ? // coordenada "y" do centro
ang = ? // ângulo da espada
dist = ? // distância do personagem à espada

x = cx + lengthdir_x(dist, ang);
y = cy + lengthdir_y(dist, ang);

image_angle = ang;
Você pode escolher quais variáveis dependem da posição do personagem, sendo que cx e cy certamente dependerão.
Agora, paths mais complexos também podem usar equações. Uma vez, eu fiz umas orbes que circulavam ao redor do personagem, com a depth variando em função dela estar indo ou voltando. Dá muito trabalho e requer uma boa dose de conhecimentos matemáticos, mas o resultado costuma valer a pena.
Não entendi completamente o código, mas agradeço encarecidamente por me apresentar as funções lengthdir_x e  lengthdir_y. Acho que elas me ajudarão, e muito, no que procuro implementar.

Re: Como fazer o path se mover junto com o personagem

Enviado: Ter Jan 17, 2017 2:30 pm
por saim
Elas funcionam como seno e cosseno, já multiplicados pela distância e funcionando com graus, ao invés de radianos. Seria fácil criar um script que fizesse a mesma coisa, mas elas já estão aí, built-in, funcionando lindamente.
Tatue essas duas no antebraço, você ainda vai usar elas como se fossem oxigênio.

O código só pega as variáveis de entrada (centro, ângulo e distância) e usa pra achar uma posição. Como eu vi, no gif, que o image_angle também era importante, incluí ele. O importante, mesmo, são os valores de entrada, o centro (o ombro da personagem), a distância (seria o tamanho do braço, se houvesse um braço) e o ângulo, que varia de 90 a -45 (ou seja, percorre um caminho de 135 graus) em uns 3 a 4 steps, portanto, digamos,

Código: Selecionar todos

ang = 90 - (135/4)*t
onde "t" é o tempo de vida da espada

Re: Como fazer o path se mover junto com o personagem

Enviado: Ter Jan 17, 2017 4:25 pm
por Koreha
saim escreveu:Elas funcionam como seno e cosseno, já multiplicados pela distância e funcionando com graus, ao invés de radianos. Seria fácil criar um script que fizesse a mesma coisa, mas elas já estão aí, built-in, funcionando lindamente.
Tatue essas duas no antebraço, você ainda vai usar elas como se fossem oxigênio.

O código só pega as variáveis de entrada (centro, ângulo e distância) e usa pra achar uma posição. Como eu vi, no gif, que o image_angle também era importante, incluí ele. O importante, mesmo, são os valores de entrada, o centro (o ombro da personagem), a distância (seria o tamanho do braço, se houvesse um braço) e o ângulo, que varia de 90 a -45 (ou seja, percorre um caminho de 135 graus) em uns 3 a 4 steps, portanto, digamos,

Código: Selecionar todos

ang = 90 - (135/4)*t
onde "t" é o tempo de vida da espada
Já consegui terminar, amei essa função, obrigado.