[Ajuda] Colisão de plataforma ao atacar

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

Resolvido [Ajuda] Colisão de plataforma ao atacar

Mensagem por rmallermartins em Sex 03 Jul 2015, 21:30

Ola pessoal, estou desenvolvendo (pelo menos tentando com o pouco tempo que tenho por dia) um game para o Concurso Semanal #01 no estilo plataforma.

Bom, primeiramente, fiz todas as checagens de colisão com o chão usando Pixel Perfect e está funcionando corretamente.

Estou usando um Objeto obj_playerHitbox que é criado quando o comando de ataque do player é acionado, esse mesmo objeto é destruído quando a animação de ataque acaba ou acerta um inimigo, isso também funciona corretamente.

O problema é que quando o Player está caindo com um chão a sua frente e é usada a ação de ataque, durante o tempo que o obj_playerHitbox existe, o player para de cair. Como no caso da figura abaixo, o retângulo cinza é a área do obj_playerHitbox:



Não consigo descobrir o que está causando isso, pois minha checagem de colisão vertical está assim em um script que é executado pelo obj_player:

Código:
if (place_meeting(x, y+vsp, obj_ground))
{
    while(!place_meeting(x, y+sign(vsp), obj_ground))
    {
        y += sign(vsp);
    }
    vsp = 0;
}

ou seja, eu apenas faço a verificação de colisão do obj_player que chama o script com o obj_ground que seria o chão, em nenhum momento o obj_playerHitbox entra na história.

O que eu penso é que por ele estar sendo criado em um script chamado pelo obj_player, o Game Maker interpreta como se ele fizesse parte do obj_player e faz a checagem de colisão, pois isso só acontece se tiver um chão na frente como foi mostrado na figura.

Se alguém souber por que isso acontece ou tiver alguma ideia, agradeço muito por qualquer ajuda Smile

EDITADO:

Download da aplicação para quem quiser baixar e testar para ver o que está acontecendo. Setas direcionais para movimentação e ESPAÇO ataca.

rmallermartins

Ranking : Sem avaliações
Número de Mensagens : 14
Idade : 23
Data de inscrição : 06/04/2015
Reputação : 0
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   : 0
   : 0
   : 0

Voltar ao Topo Ir em baixo

Resolvido Re: [Ajuda] Colisão de plataforma ao atacar

Mensagem por Rodrigo Santiago em Sab 04 Jul 2015, 08:35

rmallermartins e a mascara de colisão?

Lá no obj_player coloque uma mascara, isso sempre deve ser feito quando se faz jogos de plataforma. E isso causa esse tipo de problema mesmo.

Rodrigo Santiago

Ranking : Nota B
Número de Mensagens : 1281
Idade : 20
Data de inscrição : 28/07/2012
Notas recebidas : C + C + B
Reputação : 73
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   : 3
   : 1
   : 3

Voltar ao Topo Ir em baixo

Resolvido Re: [Ajuda] Colisão de plataforma ao atacar

Mensagem por EsDB em Sab 04 Jul 2015, 10:59

Código:

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

"Se tiver algo abaixo...Se não tiver algo abaixo"

Percebeu o conflito de interesses? Razz

Para dar o if, algum obj_ground deve estar abaixo do player...
Mas para repetir o while...Nenhum obj_ground deve estar abaixo...

E outra coisa, você está usando sign()...Se não me engano, isso retorna -1, 0 ou 1 que é para checar se um valor é negativo, zero ou positivo...

EsDB

Ranking : Sem avaliações
Número de Mensagens : 11
Data de inscrição : 22/06/2015
Reputação : 1
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0

Voltar ao Topo Ir em baixo

Resolvido Re: [Ajuda] Colisão de plataforma ao atacar

Mensagem por rmallermartins em Sab 04 Jul 2015, 12:20

Rodrigo Santiago escreveu:rmallermartins e a mascara de colisão?

Lá no obj_player coloque uma mascara, isso sempre deve ser feito quando se faz jogos de plataforma. E isso causa esse tipo de problema mesmo.

Sim cara, hj na hora que acordei pensei nisso, a mascara de colisão do spr_playerAttack está diferente --', era a coisa mais simples e burra possível kkkkkkk, e eu achando que era algo um pouco mais complexo  nervoso

EsDB escreveu:"Se tiver algo abaixo...Se não tiver algo abaixo"

Percebeu o conflito de interesses? Razz

Para dar o if, algum obj_ground deve estar abaixo do player...
Mas para repetir o while...Nenhum obj_ground deve estar abaixo...

E outra coisa, você está usando sign()...Se não me engano, isso retorna -1, 0 ou 1 que é para checar se um valor é negativo, zero ou positivo...

EsDB, isso funciona, é o Pixel Perfect. O que isso faz?

Se tiver um obj_ground em baixo do meu obj_player na distância do vsp (velocidade vertical) ele executa o while e faz a vsp zerar, ou seja, o obj_player parar de cair. Se só zerasse, o meu obj_player ficaria parado vsp pixels acima do obj_ground, o while faz com que ele desça sign(vsp) (que seria 1) pixel para baixo por vez enquanto não houver um obj_ground, ou seja, faz meu Player encostar no chão ao invés de ficar voando. o.-

rmallermartins

Ranking : Sem avaliações
Número de Mensagens : 14
Idade : 23
Data de inscrição : 06/04/2015
Reputação : 0
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   : 0
   : 0
   : 0

Voltar ao Topo Ir em baixo

Resolvido Re: [Ajuda] Colisão de plataforma ao atacar

Mensagem por Conteúdo patrocinado Hoje à(s) 18:25


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