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.

Duvida Mecânica Top and Down

Perguntas? A comunidade te ajuda a resolver.
Avatar do usuário
Ark
Membro
Membro
Reações: 0
Mensagens: 39
Localização: Rio de Janeiro

Duvida Mecânica Top and Down

Mensagem por Ark » Qui Mai 19, 2016 11:05 pm

Estou estudando a Mecânica de uma engine top-and-down no Game maker, e queria saber como faço para que o personagem mesmo encostado na parede (Objeto Solido), se mova conforme a direção pressionada .
EX: Se eu estiver apertando para cima e encostar na parede, e sem tirar o dedo do botão que vai para cima e apertar para direita, que o boneco vá para direita encostado na parede !

No meu código, o boneco para se estiver encostado na parede quando aperto os dois botões juntos, só quando salto os botões e pressiono para direita sem apertar para cima ele move.

Meio confuso mais e isso ae  =D
Código Movimentação e colisão : 

esq = keyboard_check(ord("A"));
dir = keyboard_check(ord("D"));
cima = keyboard_check(ord("W"));
baixo = keyboard_check(ord("S"));


hsp = -esq + dir;
vsp = -cima + baixo;
//Horizontal collison
if(place_meeting(x+sign(hsp),y,obj_wall)){
   while(!place_meeting(x+sign(hsp),y,obj_wall)){
       hsp += sign(hsp);
   }
   hsp = 0;
}


//Tentativa de fazer ele se mover mesmo encostando na parede!
if(cima && dir && place_meeting(x,y-vsp,obj_wall)){
   hsp += dir;
}

x += hsp * movespeed;
//Vertical Collison
if(place_meeting(x,y+sign(vsp),obj_wall)){
   while(!place_meeting(x,y+sign(vsp),obj_wall)){
       vsp += +sign(vsp);
   }
   vsp = 0;
}

y += vsp * movespeed;

Avatar do usuário
Rodrigo Santiago
Colaborador
Colaborador
Reações: 0
Mensagens: 273

Re: Duvida Mecânica Top and Down

Mensagem por Rodrigo Santiago » Qui Mai 19, 2016 11:25 pm

Acho que você errou um pouco na logica( na verdade eu nao entendi o hsp e vsp = 0 depois do loop :ué: veja só como deve ficar :

Código: Selecionar todos

esq = keyboard_check(ord("A"));
dir = keyboard_check(ord("D"));
cima = keyboard_check(ord("W"));
baixo = keyboard_check(ord("S"));

hsp = dir - esq;
vsp = baixo - cima;
//Horizontal collison
if(place_meeting(x+sign(hsp),y,obj_wall)){
  hsp = 0;
   while(!place_meeting(x+sign(hsp),y,obj_wall)){
       hsp += sign(hsp);
   }
}

x += hsp * movespeed;
//Vertical Collison
if(place_meeting(x,y+sign(vsp),obj_wall)){
  vsp = 0;
   while(!place_meeting(x,y+sign(vsp),obj_wall)){
       vsp += +sign(vsp);
   }
}

y += vsp * movespeed;
Só o fato de separar x e y já faz deslizar!

Avatar do usuário
Ark
Membro
Membro
Reações: 0
Mensagens: 39
Localização: Rio de Janeiro

Re: Duvida Mecânica Top and Down

Mensagem por Ark » Sex Mai 20, 2016 1:58 am

Obrigado Rodrigo, vou testar =D

Então Rodrigo o hsp = 0 e vsp = 0 e quando o boneco colidir com a parede ele não vai se mover ,"não atravessar" vamos dizer assim

Avatar do usuário
Rodrigo Santiago
Colaborador
Colaborador
Reações: 0
Mensagens: 273

Re: Duvida Mecânica Top and Down

Mensagem por Rodrigo Santiago » Sex Mai 20, 2016 8:46 am

Ar k veja só :
   while(!place_meeting(x,y+sign(vsp),obj_wall)){
       vsp += +sign(vsp);
   }
   vsp = 0;


Essa parte ai do codigo não faz sentido, vsp SEMPRE será 0 o while ai é totalmente inutil .:yes: 

Alias, acabei de achar um erro lógico o código deve ser o seguinte :

Código: Selecionar todos

esq = keyboard_check(ord("A"));
dir = keyboard_check(ord("D"));
cima = keyboard_check(ord("W"));
baixo = keyboard_check(ord("S"));

hsp = (dir - esq)*movespeed;
vsp = (baixo - cima)*movespeed;
//Horizontal collison
if(place_meeting(x+sign(hsp),y,obj_wall)){
  hsp = 0;
   while(!place_meeting(x+sign(hsp),y,obj_wall)){
       hsp += sign(hsp);
   }
}

x += hsp;
//Vertical Collison
if(place_meeting(x,y+sign(vsp),obj_wall)){
  vsp = 0;
   while(!place_meeting(x,y+sign(vsp),obj_wall)){
       vsp += +sign(vsp);
   }
}
y += vsp;

Trancado

Quem está online

Usuários navegando neste fórum: Semrush [Bot] e 12 visitantes