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)