Página 1 de 1

Problemas com pulo diagonal

Enviado: Sáb Fev 25, 2017 7:54 pm
por TootyDev
Estou fazendo um Protótipo de um jogo plataforma e ao testar varias vezes descobri um Bug que eu nem imagino como resolve!!
O Player meio que trava na parede, ele consegue sair mais quando você pula de jeito diagonal ele "prende" o player

IMAGEM DO BUG:


PROGRAMAÇÃO DO PLAYER
Create:

Código: Selecionar todos

/// Iniciar Variaveis
v = 4;
jump = 7;
jump_contagem = 0;
grav = 0.3;
hsp = 0;
vsp = 0;
Step:

Código: Selecionar todos

/// Movimentação e Direção
key_direita = keyboard_check(vk_right);
key_esquerda = keyboard_check(vk_left);
key_pulo = keyboard_check_pressed(vk_space);

move = key_direita - key_esquerda;
hsp = move * v;

if (vsp < 10) then vsp += grav //Limitar Gravidade e Graduação

//Duplo Pulo
if jump_contagem == 1 and key_pulo{
vsp = -jump;
jump_contagem += 1;
}

if jump_contagem == 2 and place_meeting(x,y+1,obj_wall){
jump_contagem = 0;
}

//Area de Colisão do Pulo
if (place_meeting(x,y+1,obj_wall)) and jump_contagem == 0{
vsp = key_pulo * -jump;
jump_contagem += 1;
}

//Colisão Horizontal
if (place_meeting(x+hsp,y,obj_wall)){
    while (!place_meeting(x+sign(hsp),y,obj_wall))
    {
    x += sign(hsp);
    }
hsp = 0;
}

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

//Setar os Valores de Hsp e Vsp
x += hsp;
y += vsp;

//Fricção
if abs(speed) > 0
    {
    friction=0.03;
    }
 else
    {
    friction=0;
    }

Re: Bug de Personagem Preso

Enviado: Dom Fev 26, 2017 9:51 am
por gabrielsch
Na colisão de pulo ao invés de verificar no ponto y + 1 verifique com y + vsp + 1, provavelmente irá funcionar melhor. No caso de travar nas diagonais você precisa verificar as coordenas horizontais, depois altera-las e ai sim seguir para verificação da colisão vertical e alterar. Mova a parte x += hsp para o meio entre a verificação horizontal e vertical.