Página 1 de 1
Me ajudem na colisão.
Enviado: Qua Mai 20, 2020 7:35 pm
por Nat_2005
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.
Re: Me ajudem na colisão.
Enviado: Qui Mai 21, 2020 12:48 am
por Chuaschinai
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.