move_towards_point() equivalente em gml?

Ver o tópico anterior Ver o tópico seguinte Ir em baixo

move_towards_point() equivalente em gml?

Mensagem por Gabreel em Qui 01 Maio 2014, 18:04

Olá pessoal, estou com um problema aqui! Estou querendo reproduzir exatamente o mesmo efeito do move_towards_point, pois a minha bola não trabalha com a variável speed e sim com 3 variáveis independentes chamadas y_speed, x_speed e z_speed.  O código originalmente era assim:
Código:
move_towards_point((parente).dominio.x,(parente).dominio.y,distance_to_object((parente).dominio)/2+friction);  

Mas na minha tentativa em converter, pensei em:
Código:
    x_speed=lengthdir_x(distance_to_object((parente).dominio)/2+friction,point_direction(x,y,(parente).dominio.x,(parente).dominio.y));
    y_speed=lengthdir_y(distance_to_object((parente).dominio)/2+friction,point_direction(x,y,(parente).dominio.x,(parente).dominio.y));

Cheguei à um efeito quase perfeito, mas ainda assim não foi o esperado, sugestões?

Vídeo dos dois casos:


Gabreel

Número de Mensagens : 2227
Idade : 20
Data de inscrição : 02/10/2009
Reputação : 52
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   : 0
   : 0
   : 0

Voltar ao Topo Ir em baixo

Re: move_towards_point() equivalente em gml?

Mensagem por PedroX em Qui 01 Maio 2014, 18:39

move_towards_point((parente).dominio.x,(parente).dominio.y,distance_to_object((parente).dominio)/2+friction);

Podemos usar direction e speed para facilitar:
Código:
direction=point_direction(x, y, (parente).dominio.x, (parente).dominio.y);
speed=distance_to_object((parente).dominio)/2+friction;

x_speed=hspeed;
y_speed=vspeed;

speed=0;

PedroX

Ranking : Nota C
Número de Mensagens : 6034
Idade : 21
Data de inscrição : 26/07/2008
Notas recebidas : C+B
Reputação : 286
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   :
   :
   :

Voltar ao Topo Ir em baixo

Re: move_towards_point() equivalente em gml?

Mensagem por polosam em Qui 01 Maio 2014, 18:49

Gabreel, não sei como você programou o sistema de mudança de direction do objeto do jogador, deixa eu ver se entendi o teu problema:
 Teu problema é que quando ele vira 180º a bola simplesmente teleporta, é? Se for isso, acho que deve ser revista a programação do player virando, talvez fosse bom colocar ele para andar pra frente na seta de cima, e virar o direction  para a esquerda e para a direita (isso rotacionaria direitinho.)
 Não sou muito bom com programação, e isso que eu falei também não ficou muito claro, por isso estou compartilhando aqui um projeto incompleto com um torso fake 3d que se movimenta do jeito que eu falei:
http://www.4shared.com/file/fsHwpCv8ce/TOPCQ.html?

polosam

Número de Mensagens : 424
Idade : 24
Data de inscrição : 20/12/2010
Reputação : 52
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   : 0
   : 0
   : 0

Voltar ao Topo Ir em baixo

Re: move_towards_point() equivalente em gml?

Mensagem por Gabreel em Qui 01 Maio 2014, 19:06

Infelizmente aconteceu a mesma coisa, e seguindo sua ideia, tentei
Código:
move_towards_point((parente).dominio.x,(parente).dominio.y,distance_to_object((parente).dominio)/2+friction);  

    x_speed=hspeed;
    y_speed=vspeed;

    speed=0;


Com os mesmos resultados. Nesse caso, imagino que estava fazendo essa 'conversão' corretamente, então fiquei analisando os dados no debug.

Quando eu usava speed, o |hspeed| ficava maior que .5 somente quando havia alteração da direção. Já o |x_speed| era sempre próximo à 4.8 quando movimentado na horizontal. Segue meu código da fricção:

Código:
s_speed = abs(x_speed) + abs(y_speed);

if(z == 0){
    if(!instance_exists(objNeve)){
        if s_speed>5 friction = .1 else friction = 0.05
    }else{  
        if s_speed>5 friction = .05 else friction = 0.025;
    }
}else{
    if s_speed>10 friction = .5 else friction = .05
}

z+=z_speed;
x+=x_speed;
y+=y_speed;

if x_speed>0 { x_speed-=friction; }else if(x_speed<0){ x_speed+=friction; }
if y_speed>0 { y_speed-=friction; }else if(y_speed<0){ y_speed+=friction; }

if ((x_speed<=.25 && x_speed>0) || (x_speed>=-.25 && x_speed<0)) { x_speed=0; }
if ((y_speed<=.25 && y_speed>0) || (y_speed>=-.25 && y_speed<0)) { y_speed=0; }

#Polosam# Na verdade se você ver o vídeo, vai notar que antes de alterar o código, a bola corria muito mais suavemente do que antes!

Gabreel

Número de Mensagens : 2227
Idade : 20
Data de inscrição : 02/10/2009
Reputação : 52
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   : 0
   : 0
   : 0

Voltar ao Topo Ir em baixo

Re: move_towards_point() equivalente em gml?

Mensagem por Conteúdo patrocinado Hoje à(s) 11:28


Conteúdo patrocinado


Voltar ao Topo Ir em baixo

Ver o tópico anterior Ver o tópico seguinte Voltar ao Topo

- Tópicos similares

 
Permissão deste fórum:
Você não pode responder aos tópicos neste fórum