Obrigado por visitar a The Game Makers Brasil 😁 Use o fórum de Dúvidas para fazer perguntas. Se está em busca de aprender dê uma olhada nos tutoriais.

movimentação Tópico resolvido

Perguntas? A comunidade te ajuda a resolver.
Avatar do usuário
BrNaVeia
Novato
Novato
Reações: 0
Mensagens: 2

movimentação

Mensagem por BrNaVeia » Dom Jan 07, 2024 5:47 pm

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

}

Avatar do usuário
KanekiZLF
Membro
Membro
Reações: 4
Mensagens: 38
Localização: Para

Re: movimentação  Tópico resolvido

Mensagem por KanekiZLF » Sex Jan 12, 2024 12:47 am

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 !
Ninguém vai bater tão forte como a vida, mas a questão não é o quão forte você consegue bater. É o quão forte você consegue apanhar e continuar seguindo em frente.

Responder

Quem está online

Usuários navegando neste fórum: Nenhum usuário registrado e 0 visitante