spd = 5;
hspd = 0;
vspd = 0;
grv = 0.4;
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
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
Colisão com chão
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
#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
- Chuaschinai
- Colaborador
- Reações: 6
- Mensagens: 198
-
- Chuaschinai
- Colaborador
- Reações: 6
- Mensagens: 198
-
Re: Colisão com chão
Ele simplesmtente atravessa o chão, minhas velocidades estão assim:grononmc escreveu:Você colocou o incremento de velocidade?
spd = 5;
hspd = 0;
vspd = 0;
grv = 0.4;
- Chuaschinai
- Colaborador
- Reações: 6
- Mensagens: 198
-
Re: Colisão com chão
Testei aqui e continua atravessando o chãogrononmc escreveu:Testa com menos gravidade, tenta 0.1, so para ver o que acontece.
- Chuaschinai
- Colaborador
- Reações: 6
- Mensagens: 198
-
Re: Colisão com chão
Estranho aqui o código funcionou normal, os objetos tem sprite atribuida a eles?
Re: Colisão com chão
Tem sim, todos tem sprite menos o background da room mas acho que isso não faz diferençagrononmc escreveu:Estranho aqui o código funcionou normal, os objetos tem sprite atribuida a eles?
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
- Chuaschinai
- Colaborador
- Reações: 6
- Mensagens: 198
-
Re: Colisão com chão
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
Não, não tem código nenhum nelegrononmc 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?
- Chuaschinai
- Colaborador
- Reações: 6
- Mensagens: 198
-
Re: Colisão com chão
É 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
talvez seja meu gamemaker que esteja bugado? se eu não descobrir nenhuma solução vou reinstalar ele de novo pra ver se conserta
- Chuaschinai
- Colaborador
- Reações: 6
- Mensagens: 198
-
Re: Colisão com chão
Faça um teste rápido, crie um Draw Event no obj_wall, e ponha esse código nele:
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.
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);
Re: Colisão com chão
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 :)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.
- Chuaschinai
- Colaborador
- Reações: 6
- Mensagens: 198
-
Re: Colisão com chão
Fico feliz, precisar tamo ae =D.Alexandre escreveu: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 :)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.
- Joaollima_50
- Novato
- Reações: 0
- Mensagens: 1
Re: Colisão com chão
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)
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)
Quem está online
Usuários navegando neste fórum: Nenhum usuário registrado e 1 visitante