Página 1 de 1

Tutorial de Sistema de Colisão X Y e Gravidade GM2

Enviado: Sáb Abr 29, 2023 12:54 pm
por KanekiZLF
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")); 
esta função só funcionará uma vez para cada vez que a tecla for pressionada.

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;
Evento Criar (Event Create):

Código: Selecionar todos

velocidadeH = 0;
velocidadeV = 0;
velocidade  = 2;
gravidade   = 0.2;
direita = 0;
esquerda = 0;
cima = 0;
baixo = 0;
Feito tudo isso, agora crie um novo script, e substitua oque esta dentro dele pelo nosso script de colisão:

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;
	}
}
Por fim, basta chamar nosso script de colisão dentro do nosso Evento Etapa (Event Step), ele deve ficar acima do nosso código de movimentação:

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 preferir, pode colocar o código de movimentação dentro do script de colisão, basta colocar ele no fim do código de colisão.
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 !