Boa tarde pessoal, sei que muitos ja sabem como funciona colisão, porém vim compartilhar com vocês meu script e como ele funciona, eu estou usando Gamer Maker 2
Primeiro faça algumas alterações, no seu Evento Criar (Create), vamos deixar nossas velocidades H e V em 0, assim como nossas direções, pois iremos adicionar elas somente quando uma tecla for pressionada, lembre-se de alterar a velocidade de acordo com seu jogo e a gravidade também, no meu ficou assim:
Aqui estou fazendo um jogo de plataforma, então preciso de gravidade, porém se você estiver fazendo jogo top dawn, pode comenta a linha de gravidade, e descomenta as linhas de movimentação.
Se estiver criando jogo Plataforma igual eu, então mude a movimentação cima pra isso >
Código: Selecionar todos
cima = keyboard_check_pressed(ord("W"));
Não se esqueça de mudar o objColisParede para o seu obj de colisão.
Para a movimentação do meu player, eu to usando o seguinte:
Evento Etapa (Event Step):
Código: Selecionar todos
// Movimentação
direita = keyboard_check(ord("D"));
esquerda = keyboard_check(ord("A"));
cima = keyboard_check(ord("W"));
//baixo= keyboard_check(ord("S"));
velocidadeH = (direita - esquerda) * velocidade;
//velocidadeV = (cima - baixo) * velocidade;
Código: Selecionar todos
velocidadeH = 0;
velocidadeV = 0;
velocidade = 2;
gravidade = 0.2;
direita = 0;
esquerda = 0;
cima = 0;
baixo = 0;
Código: Selecionar todos
// Script assets have changed for v2.3.0 see
// https://help.yoyogames.com/hc/en-us/articles/360005277377 for more information
function scrColision(){
if place_meeting(x + velocidadeH, y, objColisParede){
while !place_meeting(x + sign(velocidadeH), y, objColisParede){
x += sign(velocidadeH);
}
velocidadeH = 0;
}
x += velocidadeH;
//Colisao Y
if place_meeting(x, y + velocidadeV, objColisParede){
while !place_meeting(x, y + sign(velocidadeV), objColisParede){
y += sign(velocidadeV);
}
velocidadeV = 0;
}
y += velocidadeV;
//Gravidade
if !place_meeting(x, y + 1, objColisParede) {
velocidadeV += gravidade;
}
}
Código: Selecionar todos
scrColision();
// Movimentação
direita = keyboard_check(ord("D"));
esquerda = keyboard_check(ord("A"));
cima = keyboard_check(ord("W"));
//baixo= keyboard_check(ord("S"));
velocidadeH = (direita - esquerda) * velocidade;
//velocidadeV = (cima - baixo) * velocidade;
Se chegou até aqui, eu fico muito feliz, e espero que isso tenha lhe ajudado, um forte abraço e qualquer duvida deixe ai nos comentários !