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
» player não consegue andar
por lovn7 Qui 21 Nov 2024, 13:33

» É possível fazer istó no game maker
por William Lima Qui 21 Nov 2024, 10:56

» Rio Rise - novo launcher do Gta San Andreas SAMP Brasil
por Lua Sáb 16 Nov 2024, 20:22

» (Resolvido) Cenario longo x Texture Pages
por josuedemoraes Sáb 16 Nov 2024, 15:31

» Kids' band
por Adilson Lucindo Santos Sex 15 Nov 2024, 12:23

» (RESOLVIDO) Engasgos-Troca de Sprites/animações
por josuedemoraes Ter 12 Nov 2024, 01:49

» Block Room - DEMO
por Joton Qua 06 Nov 2024, 22:58

» Game Infinito vertical (subindo)
por macmilam Sáb 26 Out 2024, 12:36

» Retorno da GMBR!!!
por Dancity Ter 22 Out 2024, 16:36

» Máquina de estados
por aminaro Qui 10 Out 2024, 13:33

» como faço pra um objeto colidir com o outro e diminuir a vida do player ?
por josuedemoraes Qui 03 Out 2024, 16:51

» RESOLVIDO: Colisão com objetos moveis
por josuedemoraes Qua 02 Out 2024, 20:28

» Crypt of the Blood Moon
por divin sphere Qua 11 Set 2024, 18:18

» como fazer um objeto seguir?
por divin sphere Dom 18 Ago 2024, 18:08

» Procuro de alguém para Modelar/Texturizar/Animar objetos 3D
por un00brn Dom 11 Ago 2024, 11:10

» Destruição de cenário (estilo DD Tank)
por CoronelZeg Sex 09 Ago 2024, 17:16

» RESOLVIDO-Como destruir uma instancia especifica de um objeto
por josuedemoraes Ter 23 Jul 2024, 00:40

» Automatizar a coleta de id
por GabrielXavier Seg 22 Jul 2024, 18:01

» Preciso de ajuda para concluir um pequeno projeto
por lmoura Qui 27 Jun 2024, 15:45

» ANGULO ACOMPANHAR O OBJETO
por Klinton Rodrigues Qui 27 Jun 2024, 08:34

» Musica reinicia quando sala reinicia
por GabrielXavier Ter 18 Jun 2024, 07:28

» como fazer uma copia de gd
por generico_cube Sex 14 Jun 2024, 15:48

» Square Adventure
por guilherme551 Ter 11 Jun 2024, 09:54

» como posso definir limite de uma variavel
por GabrielXavier Sex 07 Jun 2024, 14:14

» [Resolvido] Dúvida, colisão única de objeto
por vdm842 Sex 24 maio 2024, 09:50


[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