Obrigado por visitar a The Game Makers Brasil 😁 Use o fórum de Dúvidas para fazer perguntas. Se está em busca de aprender dê uma olhada nos tutoriais.

Colisão com chão

Perguntas? A comunidade te ajuda a resolver.
Avatar do usuário
Alexandre
Novato
Novato
Reações: 0
Mensagens: 7

Colisão com chão

Mensagem por Alexandre » Dom Out 04, 2020 7:50 pm

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

Avatar do usuário
Chuaschinai
Colaborador
Colaborador
Reações: 6
Mensagens: 198

Re: Colisão com chão

Mensagem por Chuaschinai » Dom Out 04, 2020 8:34 pm

Você colocou o incremento de velocidade?

Avatar do usuário
Chuaschinai
Colaborador
Colaborador
Reações: 6
Mensagens: 198

Re: Colisão com chão

Mensagem por Chuaschinai » Dom Out 04, 2020 8:41 pm

O que acontece quando você inicia o game?

Avatar do usuário
Alexandre
Novato
Novato
Reações: 0
Mensagens: 7

Re: Colisão com chão

Mensagem por Alexandre » Dom Out 04, 2020 8:49 pm

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;

Avatar do usuário
Chuaschinai
Colaborador
Colaborador
Reações: 6
Mensagens: 198

Re: Colisão com chão

Mensagem por Chuaschinai » Dom Out 04, 2020 8:52 pm

Testa com menos gravidade, tenta 0.1, so para ver o que acontece.

Avatar do usuário
Alexandre
Novato
Novato
Reações: 0
Mensagens: 7

Re: Colisão com chão

Mensagem por Alexandre » Dom Out 04, 2020 8:56 pm

grononmc escreveu:Testa com menos gravidade, tenta 0.1, so para ver o que acontece.
Testei aqui e continua atravessando o chão

Avatar do usuário
Chuaschinai
Colaborador
Colaborador
Reações: 6
Mensagens: 198

Re: Colisão com chão

Mensagem por Chuaschinai » Dom Out 04, 2020 9:04 pm

Estranho aqui o código funcionou normal, os objetos tem sprite atribuida a eles?

Avatar do usuário
Alexandre
Novato
Novato
Reações: 0
Mensagens: 7

Re: Colisão com chão

Mensagem por Alexandre » Dom Out 04, 2020 9:10 pm

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

Avatar do usuário
Chuaschinai
Colaborador
Colaborador
Reações: 6
Mensagens: 198

Re: Colisão com chão

Mensagem por Chuaschinai » Dom Out 04, 2020 9:19 pm

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?

Avatar do usuário
Alexandre
Novato
Novato
Reações: 0
Mensagens: 7

Re: Colisão com chão

Mensagem por Alexandre » Dom Out 04, 2020 9:21 pm

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

Avatar do usuário
Chuaschinai
Colaborador
Colaborador
Reações: 6
Mensagens: 198

Re: Colisão com chão

Mensagem por Chuaschinai » Dom Out 04, 2020 9:23 pm

É 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.

Avatar do usuário
Alexandre
Novato
Novato
Reações: 0
Mensagens: 7

Re: Colisão com chão

Mensagem por Alexandre » Dom Out 04, 2020 9:29 pm

talvez seja meu gamemaker que esteja bugado? se eu não descobrir nenhuma solução vou reinstalar ele de novo pra ver se conserta

Avatar do usuário
Chuaschinai
Colaborador
Colaborador
Reações: 6
Mensagens: 198

Re: Colisão com chão

Mensagem por Chuaschinai » Dom Out 04, 2020 9:36 pm

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.

Avatar do usuário
Alexandre
Novato
Novato
Reações: 0
Mensagens: 7

Re: Colisão com chão

Mensagem por Alexandre » Dom Out 04, 2020 9:37 pm

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 :)

Avatar do usuário
Chuaschinai
Colaborador
Colaborador
Reações: 6
Mensagens: 198

Re: Colisão com chão

Mensagem por Chuaschinai » Dom Out 04, 2020 9:40 pm

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.

Avatar do usuário
Joaollima_50
Novato
Novato
Reações: 0
Mensagens: 1

Re: Colisão com chão

Mensagem por Joaollima_50 » Qui Jan 18, 2024 11:56 am

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)

Responder

Quem está online

Usuários navegando neste fórum: Nenhum usuário registrado e 2 visitantes