Página 1 de 1

Movimento de colisão com as paredes

Enviado: Qua Jun 05, 2019 12:39 pm
por BardoÉbrio
Olá, estou com uma dúvida. Criei um sistema de colisão bem básico, mas quando estou colidindo com uma parede ela inibe todos os meus movimentos, menos o da direção contrária. Por exemplo: se estou aqui...

Imagem

... não consigo me mover para cima ou para baixo, a menos que solte a tecla de mover para a esquerda. Gostaria que o personagem conseguisse se mover para cima enquanto seguro CIMA + ESQUERDA e etc.

O código que fiz é esse:

Código: Selecionar todos

// movimentação

 // input

 key_left = -keyboard_check(vk_left);
 key_right = keyboard_check(vk_right);
 key_down = keyboard_check(vk_down);
 key_up = -keyboard_check(vk_up);
 key_run = keyboard_check(vk_lshift);
 key_dash = keyboard_check_pressed(vk_space);
 key_range = keyboard_check_pressed(vk_lcontrol);
 key_meele = keyboard_check_pressed(ord("Z"));

 moverl = key_left + key_right; 
 moveud = key_down + key_up;

 hsp = moverl * movsp;
 vsp = moveud * movsp;

 // walk

 x = x + hsp;
 y = y + vsp;
 }
Grato desde já.

Re: Movimento de colisão com as paredes

Enviado: Qua Jun 05, 2019 12:58 pm
por All-x
É muita coisa pra explicar. Desde como funcionam as colisões e como funciona a física básica.

Provavelmente tu está usando algum código no evento de colisão com a parede. Os códigos que tu vai encontrar por ai são justamente para evitar que essa colisão aconteça. Então pra começar retire os códigos do evento de colisão que fazem ele parar.

No final ali tu pode substituir as duas últimas linhas por:

Código: Selecionar todos

if not place_meeting(x + hsp, y, obj_parede) {x = x + hsp;}
if not place_meeting(x, y + vsp, obj_parede) {y = y + vsp;}
Não é o ideal. E provavelmente vai dar problemas dependendo dos valores que usar.

Tenho um tutorial simples sobre o assunto:

Movimentação Top Down

Enfim, qualquer dúvida estamos ai.

Re: Movimento de colisão com as paredes

Enviado: Qua Jun 05, 2019 1:41 pm
por BardoÉbrio
Valeu cara, vou usar isso por enquanto =)