Duvida Mecânica Top and Down
Enviado: 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;
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;