Bug em colisão vertical Tópico resolvido
Enviado: Ter Fev 13, 2024 10:46 pm
Ta acontecendo um bug estranho na colisão do pulo, não importa a forma que eu bata a cabeça em algum obj, o personagem sempre é teleportado pra cima, ja selecionei como padrão a mascara de colisão do sprite principal no objeto do personagem, segue o meu código de colisão:
ps: o bug só acontece na colisão vertical, quando o personagem vai bater a cabeça em algo, a colisão horizontal funciona perfeitamente
var _col = instance_place(x+hvel,y,obj_chao);//instance_place checa se houve uma colisão entre os parametros
if _col { // se houver colisão
//caso estiver indo pra direita
if hvel>0{
//grudando na parte esquerda da parrede
x = _col.bbox_left +(x-bbox_right); // COMANDO PARA OTIMIZAR A AREA DE COLISAO
}
//caso estiver indo pra esquerda
if hvel<0{
//grudando da direita da parede
x = _col.bbox_right +(x-bbox_left); //COMANDO PARA OTIMIZAR A AREA DE COLISAO
}
hvel = 0;
}
//COLISAO VERTICAL
var _col = instance_place(x,y+vvel,obj_chao);
if _col{
// indo pra baixo
if y>0{ // grudando no topo da chao
y = _col.bbox_top + (y-bbox_bottom); //COMANDO PARA OTIMIZAR A AREA DE COLISAO
}
//cima
if y<0{ // grudando no teto
y = _col.bbox_bottom + (y - bbox_top);
}
vvel=0;
}
#endregion
ps: o bug só acontece na colisão vertical, quando o personagem vai bater a cabeça em algo, a colisão horizontal funciona perfeitamente
var _col = instance_place(x+hvel,y,obj_chao);//instance_place checa se houve uma colisão entre os parametros
if _col { // se houver colisão
//caso estiver indo pra direita
if hvel>0{
//grudando na parte esquerda da parrede
x = _col.bbox_left +(x-bbox_right); // COMANDO PARA OTIMIZAR A AREA DE COLISAO
}
//caso estiver indo pra esquerda
if hvel<0{
//grudando da direita da parede
x = _col.bbox_right +(x-bbox_left); //COMANDO PARA OTIMIZAR A AREA DE COLISAO
}
hvel = 0;
}
//COLISAO VERTICAL
var _col = instance_place(x,y+vvel,obj_chao);
if _col{
// indo pra baixo
if y>0{ // grudando no topo da chao
y = _col.bbox_top + (y-bbox_bottom); //COMANDO PARA OTIMIZAR A AREA DE COLISAO
}
//cima
if y<0{ // grudando no teto
y = _col.bbox_bottom + (y - bbox_top);
}
vvel=0;
}
#endregion