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.

Movimento de colisão com as paredes

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

Movimento de colisão com as paredes

Mensagem por BardoÉbrio » Qua Jun 05, 2019 12:39 pm

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á.

Avatar do usuário
All-x
Administrador
Administrador
Reações: 8
Mensagens: 621
Localização: Dourados-MS

Contato:

Re: Movimento de colisão com as paredes

Mensagem por All-x » Qua Jun 05, 2019 12:58 pm

É 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.
Começando com o Game Maker? Olhou para assinatura certa!

Imagem

Tutoriais e vídeo aulas de programação! Clique no Banner e confira!

Avatar do usuário
BardoÉbrio
Novato
Novato
Reações: 0
Mensagens: 2

Re: Movimento de colisão com as paredes

Mensagem por BardoÉbrio » Qua Jun 05, 2019 1:41 pm

Valeu cara, vou usar isso por enquanto =)

Responder

Quem está online

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