Página 1 de 1

Como movimentar pelo wasd (comecei agora no game maker)

Enviado: Sex Ago 30, 2024 11:02 pm
por linkgl0600
Olá, tenho tentado a mexer no game maker, mais toda vez que tento replicar o código que faz o player se mover pelo wasd NUNCA FUNCIONA, isso provavelmente ocorre pela meu incrível nível de burrice, alguém pode me dizer algum código que funciona?

Re: Como movimentar pelo wasd (comecei agora no game maker)

Enviado: Qua Set 11, 2024 11:43 pm
por KanekiZLF
Boa noite, tudo bem ? espero que sim !!

Primeiro defina o tipo de jogo se é TOP DOWN(Jogos tipo zelda antigo) ou se é 2D(Super Mario), após definir isso vamos criar dois objetos o objPlayer e o objWall(Parede), agora vamos ao código!!

No seu evento criar do objPlayer deixe assim:

Código: Selecionar todos

/// @description Inserir descrição aqui
// Você pode escrever seu código neste 
speedH = 0; //Velocidade em que se move na HORIZONTAL
speedV = 0; //Velocidade em que se move na VERTICAL
mySpeed = 1; //Nossa velocidade de movimentação
myGravity = 0.2; //Velocidade em que cai (peso, digamos assim)

// Movimentação
right = 0; // Direita
left = 0; // Esquerda
up = 0; // Cima
down = 0; // Baixo


// Colisão
objColisWall = objWall; // Aqui coloque seu objeto colisão, esse objeto sera seu chão


Feito isso, vamos criar dois scripts:


No primeiro script de CTRL+A e cole nosso script:

Código: Selecionar todos

// Script desenvolvido por Luiz F. R. Pimentel
// https://github.com/KanekiZLF
function scrCollision() {

//Colisao X
	if place_meeting(x + speedH, y, objColisWall)  {
	while !place_meeting(x + sign(speedH), y, objColisWall)  {
		x += sign(speedH);
	}
		speedH = 0;
	}
	x += speedH;

//Colisao Y
	if place_meeting(x, y + speedV, objColisWall) {
		while !place_meeting(x, y + sign(speedV), objColisWall) {
			y += sign(speedV); 
	}
		speedV = 0;
	}
	y += speedV;

//myGravity
	if !place_meeting(x, y + 1, objColisWall) {
		speedV += myGravity;
	} // Esta parte é pra caso seu jogo seja 2D se for top down você pode comentar esta parte !!
}
Este script verifica continuamente se você esta colidindo com algum objeto e se estiver ele diz que sua velocidade é igual a 0, ou seja, você não pode cair nem subir, caso não esteja colidindo, ai sua velocidade pode ser alterada, se quiser entender melhor, recomendo fortemente que leia sobre cada função !!


Vamos para nosso segundo script:

Código: Selecionar todos

// Os recursos de script mudaram para a v2.3.0; veja
// https://help.yoyogames.com/hc/en-us/articles/360005277377 para obter mais informações
function scrMove() {
// Movimentação
	if !left {
		right = keyboard_check(ord("D"));
	}
		
	if !right {
		left = keyboard_check(ord("A"));
	}
		
	/*if !up {
		down = keyboard_check(ord("S"));
	}
		
	if !down {
		up = keyboard_check(ord("W"));
	}*/ // Desconte aqui se for jogo TOP DOWN
		
	up = keyboard_check_pressed(ord("W"));
		
	if (up) {
		speedV -= 5;
	}	
	
	speedH = (right - left) * mySpeed;
	//speedV = (down - up) * mySpeed; // Descomente aqui se for jogo TOP DOWN
}
Agora vamos parti para nosso evento etapa(Event Step) no objPlayer, coloque isso:

Código: Selecionar todos

/// @description Inserir descrição aqui
// Você pode escrever seu código neste editor
scrCollision();
scrMove();
Depois disso, ja esta funcionando, vamos apenas criar uma room e colocar o objWall no chão vai ficar assim:



Aqui esta um exemplo que fiz Exemplo Pratico!

Eu realmente espero ter lhe ajudado, boa noite e boa sorte ai !!