Página 1 de 1

PERSONAGEM TRAVA QUANDO PULA

Enviado: Qua Jul 20, 2022 9:02 pm
por Z3USss
Ola estou um problema que quando eu pulo o meu personagem trava no meio do ar e nao sei o porque?alguem poderia me ajudar? aqui esta o codigo:

step:
direita= keyboard_check(ord("D"));
esquerda= keyboard_check(ord("A"));
cima= keyboard_check(ord("W"));

hveloc= (direita - esquerda) * veloc;

if !place_meeting(x, y + 1,obj_parede){
vveloc += gravidade;
}else{
if cima{
vveloc = -16
}


if place_meeting(x + hveloc, y,obj_parede){
while !place_meeting(x + sign(hveloc), y,obj_parede){
x += sign(hveloc);
}
hveloc= 0;
}

x += hveloc;

if place_meeting(x, y + vveloc,obj_parede){
while !place_meeting(x, y + sign(vveloc),obj_parede){
y += sign(vveloc);
}
vveloc= 0;
}

y += vveloc;

}

create:
cima= 0;

gravidade= 1;

Re: PERSONAGEM TRAVA QUANDO PULA  Tópico resolvido

Enviado: Sex Jul 22, 2022 11:06 am
por All-x
Reordenei teu código:

Código: Selecionar todos

direita = keyboard_check(ord("D"));
esquerda = keyboard_check(ord("A"));
cima = keyboard_check_pressed(ord("W"));

hveloc = (direita - esquerda) * veloc;

if cima {
	vveloc = -16
}

if !place_meeting(x, y + 1, obj_parede) {
	vveloc += gravidade;
}

if place_meeting(x + hveloc, y,obj_parede) {
	while !place_meeting(x + sign(hveloc), y, obj_parede){
		x += sign(hveloc);
	}
	hveloc= 0;
}

x += hveloc;

if place_meeting(x, y + vveloc, obj_parede){
	while !place_meeting(x, y + sign(vveloc), obj_parede){
		y += sign(vveloc);
	}
	vveloc= 0;
}

y += vveloc;
A lógica do código não fazia sentido, estava assim:

Código: Selecionar todos

SE NÃO COLIDIR COM O 'obj_parede' POR BAIXO
	APLICA GRAVIDADE
CASO COLIDIR COM O 'obj_parede' POR BAIXO
	PODE PULAR SE TECLAR 'CIMA'
	
	APLICA VELOCIDADE HORIZONTAL
	
	APLICA VELOCIDADE VERTICAL (QUE INCLUI A GRAVIDADE)

Ou seja só se movimentaria se estivesse colidindo com a parede por baixo. Então caso posicionasse ele "no ar" na room ficaria travado e se deixasse colado no chão ele poderia até ir pra direita ou esquerda, mas assim que pulasse ou caísse iria travar.