Avatar do usuário
Nat_2005
Novato
Novato
Autor
Mensagens: 1
Registrado em: Qua Mai 20, 2020 7:26 pm
Karma: 0

Me ajudem na colisão.

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.
 
grononmc
Colaborador
Colaborador
Mensagens: 52
Registrado em: Dom Fev 14, 2016 9:19 pm
Karma: 95

Re: Me ajudem na colisão.

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