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.

Me ajudem na colisão.

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

Me ajudem na colisão.

Mensagem por Nat_2005 » Qua Mai 20, 2020 7:35 pm

Create
col = spd + 2;
spd = 5
//
Step
if(keyboard_check(vk_up)){y-=spd}
if(keyboard_check(vk_down)){y+=spd}
if(keyboard_check(vk_right)){x+=spd}
if(keyboard_check(vk_left)){x-=spd}
//
Parede(Collision)
if(place_free(x,y))
// //
Quero que tenha uma parede para o Player não sair da tela. Tentei vários códigos, nenhum deu certo.

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

Re: Me ajudem na colisão.

Mensagem por Chuaschinai » Qui Mai 21, 2020 12:48 am

Tente assim, com place_meeting que checa se há um determinado objeto, diferente de place_free, que checa se há um objeto sólido:

Create

Código: Selecionar todos

spd = 5; // a velocidade que você deseja que seu player ande, não exagere
hspd = 0; // hspd representa a velocidade horizontal
vspd = 0; // vspd representa a velocidade vertical
colisao = obj_solid; // Aqui você altera o objeto que quer colidir
Step

Código: Selecionar todos

var hor = keyboard_check(ord("D")) - keyboard_check(ord("A"));
var ver = keyboard_check(ord("S")) - keyboard_check(ord("W"));
hspd = hor * spd;
vspd = ver * spd;

// Checa se há um obj_solid no eixo X
if(place_meeting(x+hspd, y, colisao)){
  // Se houver ele entra em um loop para fazer a colisão ficar precisa (pixel por pixel)
  while(!place_meeting(x+sign(hspd), y, colisao)) x += sign(hspd);
  hspd = 0; // E quando colidir deixa a velocidade igual a 0
}
x += hspd; // Adiciona sua velocidade horizontal ao X do objeto

// Faz a mesma coisa que o código a cima porém usa o eixo Y
if(place_meeting(x, y+vspd, colisao)){
  while(!place_meeting(x, y+sign(vspd), colisao)) y += sign(vspd);
  vspd = 0;
}
y += vspd;
Bom basicamente este código, faz com que seu player colida com um objeto chamado obj_solid, ele usa o place_meeting para saber se há algum objeto chamado obj_solid para poder colidir com base na sua velocidade atual. O código não é complexo mas é muito útil para fazer movimentações básicas.

Existe também esse tutorial presente aqui mesmo no forum: PGM #MOVE 01 - Introdução: Movimento Top-Down, que utiliza o place_free, ao invés do place_meeting.

Responder

Quem está online

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