Problemas com colisões.

Ver o tópico anterior Ver o tópico seguinte Ir em baixo

Problemas com colisões.

Mensagem por EdJr em Ter 20 Abr 2010, 21:37

Olá, pessoal!
Bom, tentarei ser bem direto e explicativo: Estou usando o GM 8, e estou usando paredes em formato de objetos sólidos para impedir a passagem do personagem (não sei se há uma maneira melhor, peguem leve Happy). Os objetos são invisíveis mas têm uma máscara idêntica ao formato da parede.

Estou com dois problemas relacionados às colisões. O primeiro é que, quando o personagem colide verticalmente com a parede, ele para de andar horizontalmente também. Isso eu até cheguei a resolver, mas gerou outros problemas.

O segundo é com relação às paredes diagonais: O personagem fica travando nelas também, eu queria saber se há uma maneira de "deslizar" quando se estiver pressionando apenas as teclas direita/esquerda OU cima/baixo. (Acho que essa parte ficou meio complicada de entender, mas eu tento explicar de novo se não entenderem.)

Como "ajuda-bônus", eu gostaria de saber também como faço para mudar o sprite para parado se o jogador estiver pressionando uma tecla mas o personagem não estiver se movendo.

Muito obrigado desde já!

EdJr

Número de Mensagens : 20
Idade : 21
Data de inscrição : 29/05/2009
Reputação : 0
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0

http://www.ceticismando.co.cc (Nada lá ainda)

Voltar ao Topo Ir em baixo

Re: Problemas com colisões.

Mensagem por victor_aco em Ter 20 Abr 2010, 21:55

Qual código você está usando para fazer a movimentação do personagem?

victor_aco

Número de Mensagens : 666
Idade : 21
Data de inscrição : 25/03/2010
Reputação : 2
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   : 0
   : 0
   : 0

Voltar ao Topo Ir em baixo

Re: Problemas com colisões.

Mensagem por EdJr em Ter 20 Abr 2010, 22:02

Acabei de resolver o primeiro problema, hehe. Eu tentei de todas as maneiras mais complicadas, só depois fui ver que a mais simples era a que resolvia. Mas ainda estou com o segundo problema.

O código está aí:
Código:
//////////////////////MOVIMENTAÇÃO\\\\\\\\\\\\\\\\\\\\\\\\\

if pode_teclar = "tudo" and pode_andar = true
{
/////////////////////ESQUERDA / DIREITA\\\\\\\\\\\\\\\\\\\\\\
if (keyboard_check (vk_left) and not keyboard_check(vk_right))
    {
    direcao = "esq"; movimento = "anda"; hspeed = -velocidadeh;
    }
else{
if (keyboard_check (vk_right) and not keyboard_check(vk_left))
    {
    direcao = "dir"; movimento = "anda"; hspeed = velocidadeh;
    }
}
//Fim esquerda-direita

///////////////////////CIMA / BAIXO\\\\\\\\\\\\\\\\\\\\\\\\\\
if (keyboard_check (vk_up) and not keyboard_check(vk_down))
    {
    movimento = "anda"; vspeed = -velocidadev; andav = true
    }
else{
if (keyboard_check (vk_down) and not keyboard_check(vk_up))
    {
    movimento = "anda"; vspeed = velocidadev; andav = true
    }
}
//Fim cima-baixo

/////////////////SORTA AS TECRA\\\\\\\\\\\\\\\\\\\\\
if (keyboard_check_released (vk_left and vk_right))
    {
    hspeed = 0; movimento = "para";
    }
 
if (keyboard_check_released (vk_up and vk_down))
    {
    vspeed = 0; movimento = "para"; andav = false
    }

if (keyboard_check_released (vk_left and vk_right and vk_up and vk_down))
    {
    movimento = "para"; andav = false
    }
   
if pode_andar = false
    {
    hspeed = 0; vspeed = 0; movimento = "para"
    }

//Fim do sorta as tecra
}

Se precisarem de mais detalhes, podem falar.

EdJr

Número de Mensagens : 20
Idade : 21
Data de inscrição : 29/05/2009
Reputação : 0
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0

http://www.ceticismando.co.cc (Nada lá ainda)

Voltar ao Topo Ir em baixo

Re: Problemas com colisões.

Mensagem por KinKing em Ter 20 Abr 2010, 23:03

Se trata de um jogo de visão aérea (top-down)... certo...?

E você tem paredes "diagonais..." Que diabos é isso... Paredes que não são retas com colisão "precisa" marcada?

Tipo isso, só que mais triangular e inclinado (seria o canto esquerdo-baixo)?
|\

KinKing

Número de Mensagens : 416
Data de inscrição : 29/05/2008
Reputação : 16
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   : 0
   : 0
   : 0

http://felipejoys.webnode.com

Voltar ao Topo Ir em baixo

Re: Problemas com colisões.

Mensagem por EdJr em Ter 20 Abr 2010, 23:32

Como eu já disse, o jogo será no estilo Beat'em up, olha uma imagem do Golden Axe: http://revistagames.files.wordpress.com/2009/12/golden-axe-1.jpg

Tirei uma SS do meu projeto (e recolori pra proteger os gráficos u.u), olha o que eu quero dizer:
http://img641.imageshack.us/img641/835/imagemhbf.png

Pelo que você disse ("Que diabos é isso...."), suponho que eu esteja fazendo algo errado. Se não for folga demais da minha parte, você poderia dizer o que é?

EdJr

Número de Mensagens : 20
Idade : 21
Data de inscrição : 29/05/2009
Reputação : 0
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0

http://www.ceticismando.co.cc (Nada lá ainda)

Voltar ao Topo Ir em baixo

Re: Problemas com colisões.

Mensagem por KinKing em Qua 21 Abr 2010, 10:50

Não, eu só realmente não entendi o que você quis dizer com "parede diagonal," sabe?
E lendo seu post de novo eu não achei em nenhum lugar que diz que ele será Beat'em Up... Só se você disse isso em um outro post, que eu não li.

Enfim, agora que tudo está mais claro, a minha sugestão é que você só faça o personagem andar se não houver algo sólido na frente dele, assim ele nunca entala na parede.

*Talvez* só isso já resolva seu problema, mas só talvez.

Eis um exemplo:

Código:
if (keyboard_check (vk_left) && !keyboard_check(vk_right) && place_free(x-velocidadeh,y))
{
    direcao = "esq";
    movimento = "anda";
    hspeed = -velocidadeh;
}

Onde a novidade está em "place_free(x-velocidadeh,y)" e variará para x+velocidadeh,y, x,y-velocidadev e x,y+velocidadev, se eu não estiver errado.

KinKing

Número de Mensagens : 416
Data de inscrição : 29/05/2008
Reputação : 16
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   : 0
   : 0
   : 0

http://felipejoys.webnode.com

Voltar ao Topo Ir em baixo

Re: Problemas com colisões.

Mensagem por EdJr em Qua 21 Abr 2010, 14:19

Ops, é que eu reescrevi o tópico por um problema que tinha dado aqui, esqueci de citar o estilo do jogo de novo.
O código novamente só deu certo para o primeiro problema, e ainda com um pequeno bug (nada grave, mas o código que usei foi mais eficaz), mas não resolveu o problema da parede diagonal; ele continua travando.

Consegui fazer um codigozinho aqui, não está tão compacto como poderia, eu sei, mas só vou fazer isso quando solucionar o problema completamente.
Código:

if andav = "cima" and direcao = "esq" and (place_meeting(x+15, y-2, obj_imp_ne))
    {
    hspeed = -velocidadeh; vspeed = -velocidadev
    }
   
if andav = "cima" and direcao = "dir" and (place_meeting(x-2, y-2, obj_imp_nw))
    {
    hspeed = velocidadeh; vspeed = -velocidadev
    }
   
if andav = "nada" and andah = true and direcao = "dir" and (place_meeting(x+15, y+6, obj_imp_ne))
    {
    hspeed = velocidadeh; vspeed = velocidadev
    }
Não entendi por que, mas a mesma lógica não funciona com a parede |/ ao tentar descer apertando apenas pra esquerda. Finalmente, só resta a dúvida de como fazer isso funcionar e como configurar o sprite como "parado", como eu perguntei lá em cima.

Obrigado mais uma vez. Happy

EdJr

Número de Mensagens : 20
Idade : 21
Data de inscrição : 29/05/2009
Reputação : 0
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0

http://www.ceticismando.co.cc (Nada lá ainda)

Voltar ao Topo Ir em baixo

Re: Problemas com colisões.

Mensagem por KinKing em Qua 21 Abr 2010, 15:23

Desculpa, mas não consigo ver o seu método como se fosse um método óbvio na minha cabeça para eu poder raciocinar.

O máximo que eu posso fazer é te mandar um chute, uma idéia, quem sabe né...

E se o personagem, quando se deparar uma parede e estiver para a direção direita tentando andar, simplesmente simular como se a tecla baixo estivesse apertada? Ou dar a ele uma velocidade vertical temporária, só enquanto aquela checagem for verdadeira...

KinKing

Número de Mensagens : 416
Data de inscrição : 29/05/2008
Reputação : 16
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   : 0
   : 0
   : 0

http://felipejoys.webnode.com

Voltar ao Topo Ir em baixo

Re: Problemas com colisões.

Mensagem por victor_aco em Qua 21 Abr 2010, 20:50

Decha eu ver se entendi em relação a parede diagonal. Quando você quer dizer parede diagonal você quer falar da parede lateral do prédio, como se fosse a profundidade dele?
Se for isso você quer que o player entre por um bequinho no caso na parede diagonal ou quer que ele não entre?

victor_aco

Número de Mensagens : 666
Idade : 21
Data de inscrição : 25/03/2010
Reputação : 2
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   : 0
   : 0
   : 0

Voltar ao Topo Ir em baixo

Re: Problemas com colisões.

Mensagem por EdJr em Qui 22 Abr 2010, 15:25

Sim, é a parede lateral do prédio. Só quero mesmo é que passe sem travar. É que, como a máscara do personagem é um retângulo, fica travando nos pixels diagonais da máscara da parede.

Como eu disse, já resolvi quase todo o problema com o código acima, mas ainda buga com a parede "|/".


KinKing, não sei se você falou da lógica do código em si ou de partes isoladas. Esses obj_imp são os impassáveis, e os nw e ne são "noroeste" e "nordeste", estou usando isso pra representar diagonais, por exemplo: O nw é |/ e o ne é \|.
No caso do place_meeting é óbvio, estou checando se em tal posição há colisão com o objeto. Mas acontece o contrário: Se a condição for verdadeira é que o personagem anda. Porque estou checando um local atrás do personagem, e não pelo caminho por onde ele vai passar.

E se o personagem, quando se deparar uma parede e estiver para a direção direita tentando andar, simplesmente simular como se a tecla baixo estivesse apertada? Ou dar a ele uma velocidade vertical temporária, só enquanto aquela checagem for verdadeira...
Eu fiz mais ou menos isso mesmo....

EdJr

Número de Mensagens : 20
Idade : 21
Data de inscrição : 29/05/2009
Reputação : 0
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0

http://www.ceticismando.co.cc (Nada lá ainda)

Voltar ao Topo Ir em baixo

Re: Problemas com colisões.

Mensagem por Conteúdo patrocinado Hoje à(s) 09:43


Conteúdo patrocinado


Voltar ao Topo Ir em baixo

Ver o tópico anterior Ver o tópico seguinte Voltar ao Topo

- Tópicos similares

 
Permissão deste fórum:
Você não pode responder aos tópicos neste fórum