//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
vspd = 0;
hspd = 0;
grv = 0.2;
walkspd = 4;
Step:
key_right = keyboard_check(ord("D")) or keyboard_check(vk_right);
key_left = keyboard_check(ord("A")) or keyboard_check(vk_left);
key_jump = keyboard_check(vk_space);
var move = key_right - key_left;
vspd = vspd + grv;
hspd = move * walkspd;
if (place_meeting(x, y+1, Obj_wall)) && (key_jump)
{
vspd = -7
}
//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
esses são todos os códigos que usei até agora, espero que consiga localizar o possível problema '
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
Colisão
Sou "nova" no Game Maker e tenho uma dúvida.
Eu coloquei o código de colisão tudo certinho, mas a colisão só está pegando em baixo do chão, ou seja, estou entrando no chão e a colisão pega só embaixo do mesmo, alguém sabe o que pode ser?
Eu coloquei o código de colisão tudo certinho, mas a colisão só está pegando em baixo do chão, ou seja, estou entrando no chão e a colisão pega só embaixo do mesmo, alguém sabe o que pode ser?
- Chuaschinai
- Colaborador
- Reações: 6
- Mensagens: 198
-
Re: Colisão
Olá, poderia postar o código aqui para que possamos ver o que pode estar de errado?
Sem o código fica meio complicado.
Sem o código fica meio complicado.
Re: Colisão
Estou usando esse código:Chuaschinai escreveu:Olá, poderia postar o código aqui para que possamos ver o que pode estar de errado?
Sem o código fica meio complicado.
//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
- Chuaschinai
- Colaborador
- Reações: 6
- Mensagens: 198
-
Re: Colisão
Bom, este código esta correto é o código mais comum e objetivo para colisão em plataforma.
Creio que ainda tenha um pedaço a mais do código onde ele incrementa a velocidade vertical(gravidade), e a velocidade horizontal certo?.
Pois este código checa em todas a "direções" se esta colidindo com o Obj_wall, o código por si só esta correto, mas mande tudo que você tem o Create e no Step para ficar mais fácil.
Creio que ainda tenha um pedaço a mais do código onde ele incrementa a velocidade vertical(gravidade), e a velocidade horizontal certo?.
Pois este código checa em todas a "direções" se esta colidindo com o Obj_wall, o código por si só esta correto, mas mande tudo que você tem o Create e no Step para ficar mais fácil.
Re: Colisão
Create:Chuaschinai escreveu:Bom, este código esta correto é o código mais comum e objetivo para colisão em plataforma.
Creio que ainda tenha um pedaço a mais do código onde ele incrementa a velocidade vertical(gravidade), e a velocidade horizontal certo?.
Pois este código checa em todas a "direções" se esta colidindo com o Obj_wall, o código por si só esta correto, mas mande tudo que você tem o Create e no Step para ficar mais fácil.
vspd = 0;
hspd = 0;
grv = 0.2;
walkspd = 4;
Step:
key_right = keyboard_check(ord("D")) or keyboard_check(vk_right);
key_left = keyboard_check(ord("A")) or keyboard_check(vk_left);
key_jump = keyboard_check(vk_space);
var move = key_right - key_left;
vspd = vspd + grv;
hspd = move * walkspd;
if (place_meeting(x, y+1, Obj_wall)) && (key_jump)
{
vspd = -7
}
//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
esses são todos os códigos que usei até agora, espero que consiga localizar o possível problema '
- Chuaschinai
- Colaborador
- Reações: 6
- Mensagens: 198
-
Re: Colisão
O código esta correto sem nenhum problema, tendo isso em mente, o problema pode ser na mascara de colisão de algum dos objetos, Obj_wall ou o Player que esta portando este código.
Vá na sprite de ambos e tenha certeza que a mascara de colisão esta pegando o objeto por inteiro.
Não sei sua versão mas se for a GameMaker Studio 1.4999 vá na parte de Bounding Box e marque Full Image, se for no GameMaker Studio 2 vá na sprite em Collision Mask e Mode e marque Full Image, se o player tiver mais de um tipo de sprite faça em todas, e na sprite do Obj_wall também.
Vá na sprite de ambos e tenha certeza que a mascara de colisão esta pegando o objeto por inteiro.
Não sei sua versão mas se for a GameMaker Studio 1.4999 vá na parte de Bounding Box e marque Full Image, se for no GameMaker Studio 2 vá na sprite em Collision Mask e Mode e marque Full Image, se o player tiver mais de um tipo de sprite faça em todas, e na sprite do Obj_wall também.
Re: Colisão
Fiz o que disse e continua na mesma, o estranho é que na parede da esquerda a colisão está funcionando certinho, porém na direita e chão estão dando esse erro, o que realmente está me deixando com uma dúvida enormeChuaschinai escreveu:O código esta correto sem nenhum problema, tendo isso em mente, o problema pode ser na mascara de colisão de algum dos objetos, Obj_wall ou o Player que esta portando este código.
Vá na sprite de ambos e tenha certeza que a mascara de colisão esta pegando o objeto por inteiro.
Não sei sua versão mas se for a GameMaker Studio 1.4999 vá na parte de Bounding Box e marque Full Image, se for no GameMaker Studio 2 vá na sprite em Collision Mask e Mode e marque Full Image, se o player tiver mais de um tipo de sprite faça em todas, e na sprite do Obj_wall também.
- Chuaschinai
- Colaborador
- Reações: 6
- Mensagens: 198
-
Re: Colisão
Ele entra no chão, mas não fica preso. É como se a colisão estivesse pegando só embaixo da plataforma do chão e não no bloco em si, vc consegue andar livremente em cima da colisão, porém ela não está onde deveria estar
- Chuaschinai
- Colaborador
- Reações: 6
- Mensagens: 198
-
Re: Colisão
Bom, se ele não fica preso não é um problema no código realmente, como eu disse poder ser questão da mascara do objeto, checa diretamente no objeto se não esta usando a mascara de um outro objeto diferente da sprite.
Se estiver entrando somente um pouquinho tipo 1 pixel do objeto pode ser a modificação na view.
Se você estiver usando algum script de camera, ou fez alguma modificação na view port para dar zoom ou algo do tipo, pode ser que não esteja a uma resolução adequada assim dando a impressão que esta dentro do objeto.
Se estiver entrando somente um pouquinho tipo 1 pixel do objeto pode ser a modificação na view.
Se você estiver usando algum script de camera, ou fez alguma modificação na view port para dar zoom ou algo do tipo, pode ser que não esteja a uma resolução adequada assim dando a impressão que esta dentro do objeto.
Re: Re: Colisão
Ele entra muito, tipo se a plataforma é 64x64 ele entra esses 64 (ou seja, tudo) e a colisão só pega em baixo dela.
Vou tentar achar o que pode ser esse tal erro, espero que eu consiga localizá-lo e arruma-lo
Vou tentar achar o que pode ser esse tal erro, espero que eu consiga localizá-lo e arruma-lo
Quem está online
Usuários navegando neste fórum: Nenhum usuário registrado e 0 visitante