Página 1 de 1

movimentação

Enviado: Dom Jan 07, 2024 5:47 pm
por BrNaVeia
Ola, tenho essa linha de código de movimentação, mas ele não é muito bom alguém poderia me ajudar a melhora lo (principalmente o pulo)?? Obs. O jogo e a tentativa de um plataforma

create

spd=3
jump=false
jump_v=40
grav=2


step

// movimentacao

if keyboard_check(vk_right){

x+=spd

}

if keyboard_check(vk_left){

x-=spd

}

// pulo e gravidade

if (jump = true)
if keyboard_check_pressed(vk_space){

y-=jump_v

}


if place_meeting(x,y,obj_chao){

jump = true

}else{

jump = false

y+=grav

}

Re: movimentação  Tópico resolvido

Enviado: Sex Jan 12, 2024 12:47 am
por KanekiZLF
Boa noite, tudo bem ? vou lhe ajuda a criar um super script muito bem elaborado, ele vai funciona pra duas coisas, primeiro Colisão, segundo Movimentação, vamos la

Primeiramente, apague tudo isso, iremos criar variaveis novas. no seu evento criar coloque as novas variaveis

Código: Selecionar todos

objColisParede = layer_tilemap_get_id("Paredes"); // Coloque a layer em que esta suas "Paredes" digamos assim
velocidadeH = 0; // <-- Velocidade Horizontal
velocidadeV = 0; // <-- Velocidade Vertical(Pulo)
velocidade  = 2; // <-- Velocidade de movimentação
gravidade   = 0.2; //<-- Velocidade da gravidade
direita = 0; //<-- Variavel de movimentação
esquerda = 0; //<-- Variavel de movimentação
cima = 0; //<-- Variavel do pulo
jump = -4; // <-- Altura maxima do nosso pulo
doubleJump = 0; // <-- Pulo duplo
Opa, variaveis feitas, vamos agora para a parte divertida, crie um novo script

Código: Selecionar todos

function scrCollision() {

//Colisao X
	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;
	}
	
	if !esquerda {
		direita = keyboard_check(ord("D"));
	}
		
	if !direita {
		esquerda = keyboard_check(ord("A"));
	}

	cima = keyboard_check_pressed(ord("W"));
	
	if place_meeting(x, y + 1, objColisParede) {
			doubleJump = 0; // <-- Reseta o pulo se ele estiver no chão
	}
	
	if cima && doubleJump < 2 { // <-- Verificamos se ele ja não pulo 2x
			doubleJump += 1; // <-- acrescentamos +1 a cada pulo
			velocidadeV = jump; // Nosso pulo, gogo
		}
	
	velocidadeH = (direita - esquerda) * velocidade;
}
Script concluido, lembrando, caso você esteja usando uma sprite como objeto de colisão é só mudar o objColisParede, exemplo, você tem um objParede que serve como colisor, é só muda a variavel e deixar assim objColisParede = objParede, da maneira que estamos desenvolvendo aqui é obrigatório que você esteja usando autotile e seu tilemap precisa esta em precisão por quadro


Ja ia esquecendo, chame o script dentro do seu evento etapa

Código: Selecionar todos

scrCollision();
Caso tenha alguma duvida, aqui esta um exemplo SUPERJOGUIN Obs: Fiz apenas como exemplo então esta bem simples, caso não queira que ele pula 2x é só colocar muda a função do doubleJump !