GMBR
Gostaria de reagir a esta mensagem? Crie uma conta em poucos cliques ou inicie sessão para continuar.
Entrar

Esqueci-me da senha

Últimos assuntos
» Problema ao entrar por uma porta e voltar por ela
por aminaro Seg 06 maio 2024, 10:08

» Alguém aqui já ganha dinheiro com seus games?
por theguitarmester Ter 30 Abr 2024, 11:43

» Colisões não funcionando
por theguitarmester Ter 30 Abr 2024, 10:16

» Como ajustar velocidade de cada frame da animação no game maker
por pequetux Sex 26 Abr 2024, 16:45

» Preciso de ajuda
por AftonDuGrau Dom 21 Abr 2024, 20:18

» Como faz o evento drawn GUI, não se repetir?
por aminaro Sex 19 Abr 2024, 20:30

» PROBLEMAS COM FÍSICAS DE ÁGUA
por aminaro Ter 16 Abr 2024, 10:07

» Retorno da GMBR!!!
por Ralphed Sex 12 Abr 2024, 22:45

» JOGADOR PARANDO NO AR QUANDO ATACA
por aminaro Qua 10 Abr 2024, 13:51

» Problemas com texto interativo
por Kaaru72 Dom 07 Abr 2024, 11:31

» Erro escondido e indecifrável
por dev_gabize.azv Qui 04 Abr 2024, 10:11

» Mudar cor de apenas uma palavra
por Ralphed Sáb 30 Mar 2024, 00:39

» Procuro Programador de game maker
por Wou Sex 15 Mar 2024, 10:27

» Mod APK
por gamerainha Qua 13 Mar 2024, 06:30

» Aceito pedidos de sprites (Com exemplos meus)
por Sevilha Qua 28 Fev 2024, 12:17

» Inventário simples
por Isquilo_Roedor Qui 22 Fev 2024, 15:18

» Problemas na programaçnao de inimigo [jogo DOOM LIKE]
por Black Mirror Dom 11 Fev 2024, 13:34

» ANDROID MULTI TOUCH
por DiegoBr Dom 04 Fev 2024, 12:13

» Servidor de Discord do fórum?
por Lighter Sáb 27 Jan 2024, 17:18

» Save e Load Json
por Klinton Rodrigues Qui 25 Jan 2024, 11:12

» Colisão com mais de um objeto
por aminaro Seg 22 Jan 2024, 15:02

» Oi sou novo aqui
por Thiago Silveira Alexandre Sáb 20 Jan 2024, 20:55

» Como acessar conteudo comprado no marketplace
por macmilam Sex 19 Jan 2024, 07:42

» Devlogs em vídeos do Block Room
por Joton Seg 15 Jan 2024, 16:56

» ACERVO GMBR MAGAZINE
por Joton Qui 11 Jan 2024, 19:21


[Ajuda] Colisão de plataforma ao atacar

3 participantes

Ir para baixo

[Ajuda] Colisão de plataforma ao atacar Empty [Ajuda] Colisão de plataforma ao atacar

Mensagem por rmallermartins 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:

[Ajuda] Colisão de plataforma ao atacar 15fsnie

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
rmallermartins

Games Ranking : Sem avaliações

Data de inscrição : 06/04/2015
Reputação : 0
Número de Mensagens : 14
Prêmios : [Ajuda] Colisão de plataforma ao atacar Empty

Medalhas x 0 Tutoriais x 0 Moedas x 0

Ouro x 0 Prata x 0 Bronze x 0

Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0

Ir para o topo Ir para baixo

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

Mensagem por Rodrigo Santiago Sáb 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
Rodrigo Santiago

Games Ranking : Nota B

Notas recebidas : C + C + B
Data de inscrição : 28/07/2012
Reputação : 73
Número de Mensagens : 1281
Prêmios : [Ajuda] Colisão de plataforma ao atacar Empty

Medalhas x 0 Tutoriais x 0 Moedas x 0

Ouro x 3 Prata x 1 Bronze x 3

Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0

Ir para o topo Ir para baixo

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

Mensagem por EsDB Sáb 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...
avatar
EsDB

Games Ranking : Sem avaliações

Data de inscrição : 22/06/2015
Reputação : 1
Número de Mensagens : 11
Prêmios : [Ajuda] Colisão de plataforma ao atacar Empty

Medalhas x 0 Tutoriais x 0 Moedas x 0

Ouro x 0 Prata x 0 Bronze x 0

Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0

Ir para o topo Ir para baixo

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

Mensagem por rmallermartins Sáb 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
rmallermartins

Games Ranking : Sem avaliações

Data de inscrição : 06/04/2015
Reputação : 0
Número de Mensagens : 14
Prêmios : [Ajuda] Colisão de plataforma ao atacar Empty

Medalhas x 0 Tutoriais x 0 Moedas x 0

Ouro x 0 Prata x 0 Bronze x 0

Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0

Ir para o topo Ir para baixo

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

Mensagem por Conteúdo patrocinado


Conteúdo patrocinado


Ir para o topo Ir para baixo

Ir para o topo

- Tópicos semelhantes

 
Permissões neste sub-fórum
Não podes responder a tópicos