Página 1 de 1
Colisão com chão
Enviado: Dom Out 04, 2020 7:50 pm
por Alexandre
Olá, fiz um código pra meu player colidir com o chão no GMS 2, mas ele não funciona, alguém sabe o pq?
#region CONTROLES
key_right = keyboard_check(ord("D")) //vai ir pra direita
key_left = keyboard_check(ord("A")) //Esquerda
key_jump = keyboard_check(vk_space) //Pula
#endregion
#region MOVIMENTAÇÃO
var move = key_right - key_left
hspd= move * spd;
vspd = vspd + grv;
if (hspd !=0) image_xscale = sign(hspd);
//COLISÃO HORIZONTAL
if place_meeting(x+hspd,y,obj_wall)
{
while(!place_meeting(x+sign(hspd),y, obj_wall))
{
x = x + sign(hspd);
}
hspd = 0;
}
x = x + hspd;
//COLISÃO VERTICAL
if place_meeting(x, y + vspd, obj_wall)
{
while(!place_meeting(x,y+sign(vspd), obj_wall))
{
y = y + sign(vspd);
}
vspd = 0;
}
y = y + vspd;
#endregion
Re: Colisão com chão
Enviado: Dom Out 04, 2020 8:34 pm
por Chuaschinai
Você colocou o incremento de velocidade?
Re: Colisão com chão
Enviado: Dom Out 04, 2020 8:41 pm
por Chuaschinai
O que acontece quando você inicia o game?
Re: Colisão com chão
Enviado: Dom Out 04, 2020 8:49 pm
por Alexandre
grononmc escreveu:Você colocou o incremento de velocidade?
Ele simplesmtente atravessa o chão, minhas velocidades estão assim:
spd = 5;
hspd = 0;
vspd = 0;
grv = 0.4;
Re: Colisão com chão
Enviado: Dom Out 04, 2020 8:52 pm
por Chuaschinai
Testa com menos gravidade, tenta 0.1, so para ver o que acontece.
Re: Colisão com chão
Enviado: Dom Out 04, 2020 8:56 pm
por Alexandre
grononmc escreveu:Testa com menos gravidade, tenta 0.1, so para ver o que acontece.
Testei aqui e continua atravessando o chão
Re: Colisão com chão
Enviado: Dom Out 04, 2020 9:04 pm
por Chuaschinai
Estranho aqui o código funcionou normal, os objetos tem sprite atribuida a eles?
Re: Colisão com chão
Enviado: Dom Out 04, 2020 9:10 pm
por Alexandre
grononmc escreveu:Estranho aqui o código funcionou normal, os objetos tem sprite atribuida a eles?
Tem sim, todos tem sprite menos o background da room mas acho que isso não faz diferença
edit: consegui fazer ele não atravessar o chão colocando o sprite do chão sem alongar ele, mas quando eu pulo ele atravessa o sprite, acho que o problema está na gravidade
meu codigo de pulo é esse
//PULO
if place_meeting(x,y+1,obj_wall) and key_jump
{
vspd -= 8;
}
edit 2: consegui descubrir o problema, se eu alongar o sprite do chão ele só considera um bloco como chão e os outros eu atravesso
Re: Colisão com chão
Enviado: Dom Out 04, 2020 9:19 pm
por Chuaschinai
Bom o código esta correto, creio que o problema seja com a mascara da sprite, você disse que quando não alogado ele colide, pois a mascara das sprites é o que faz o place_meeting funcionar se ele não detectar uma mascara ele não vai conseguir saber se há um objeto em sua frente. O problema pode ser no objeto wall, ele possui algum código?
Re: Colisão com chão
Enviado: Dom Out 04, 2020 9:21 pm
por Alexandre
grononmc escreveu:Bom o código esta correto, creio que o problema seja com a mascara da sprite, você disse que quando não alogado ele colide, pois a mascara das sprites é o que faz o place_meeting funcionar se ele não detectar uma mascara ele não vai conseguir saber se há um objeto em sua frente. O problema pode ser no objeto wall, ele possui algum código?
Não, não tem código nenhum nele
Re: Colisão com chão
Enviado: Dom Out 04, 2020 9:23 pm
por Chuaschinai
É estranho normalmente quando você alonga um objeto na room, a mascara de colisão vai junto com a sprite, eu faço assim e funciona.
Re: Colisão com chão
Enviado: Dom Out 04, 2020 9:29 pm
por Alexandre
talvez seja meu gamemaker que esteja bugado? se eu não descobrir nenhuma solução vou reinstalar ele de novo pra ver se conserta
Re: Colisão com chão
Enviado: Dom Out 04, 2020 9:36 pm
por Chuaschinai
Faça um teste rápido, crie um Draw Event no obj_wall, e ponha esse código nele:
Código: Selecionar todos
draw_self();
draw_rectangle_color(bbox_left, bbox_top, bbox_right, bbox_bottom, c_red, c_red, c_red, c_red, true);
Esse código vai mostrar a area de atuação da mascara do seu objeto com uma linha vermelha ao redor, com o bloco esticado veja se a linha pega todo o obj_wall.
Re: Colisão com chão
Enviado: Dom Out 04, 2020 9:37 pm
por Alexandre
grononmc escreveu:É estranho normalmente quando você alonga um objeto na room, a mascara de colisão vai junto com a sprite, eu faço assim e funciona.
Boas noticias kk, resolvi o problema! O meu sprite de chão estava 32x32 (igual meu player), mudei pra 64x64 e agora o chão funciona normal :) obrigado pela ajuda aí sério mesmo, sem vc provavelmente iria ficar uma semana pra conseguir isso :)
Re: Colisão com chão
Enviado: Dom Out 04, 2020 9:40 pm
por Chuaschinai
Alexandre escreveu:grononmc escreveu:É estranho normalmente quando você alonga um objeto na room, a mascara de colisão vai junto com a sprite, eu faço assim e funciona.
Boas noticias kk, resolvi o problema! O meu sprite de chão estava 32x32 (igual meu player), mudei pra 64x64 e agora o chão funciona normal :) obrigado pela ajuda aí sério mesmo, sem vc provavelmente iria ficar uma semana pra conseguir isso :)
Fico feliz, precisar tamo ae =D.
Re: Colisão com chão
Enviado: Qui Jan 18, 2024 11:56 am
por Joaollima_50
Olá tudo bem
Queria ajuda com isso Estou usando esse código:
//colisao horizontal
if (place_meeting(x +hspd, y, Obj_wall))
{
while(!place_meeting(x+ sign(hspd), y, Obj_wall))
{
x = x +sign(hspd);
}
hspd = 0;
}
x = x + hspd
//colisao horizontal
if (place_meeting(x, y+vspd, Obj_wall))
{
while(!place_meeting(x, y+ sign(vspd), Obj_wall))
{
y = y +sign(vspd);
}
vspd = 0;
}
y = y + vspd
Mas aparece erro
ERROR in
action number 1
of Step Event0
for object Obj_player:
Variable Obj_player.obj_wall(100012, -2147483648) not set before reading it.
at gml_Object_Obj_player_Step_0 (line 17) - if place_meeting(x+hspd,y,obj_wall)
############################################################################################
gml_Object_Obj_player_Step_0 (line 17)