Estranho problema com colisão

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

Estranho problema com colisão

Mensagem por RandomCarlos em Dom 06 Jan 2013, 21:18

Olá, estou fazendo uma engine de plataforma no estilo de megaman e acabei encontrando um bug irritante na minha colisão, quando meu personagen pula de uma plataforma que está mais baixa ou mais acima que a outra ele dá uma pequena travada e volta ao normal.
Estou usando collision_line pra detectar as colisões e fazendo testes no debug mode descobri que o problema está nessa collision_line, parece que a colisão é detectada alguns pixels acima do que eu defini e só ocorre nas situações que citei acima, já tentei mudar os valores de minha collision_line, mas nada deu certo, tentei também criar um evento de colisão com a minha plataforma e não funcionou.

O código que estou utilizando pra tratar essa colisão é esse:

Código:
colide_estrutura = collision_line(bbox_left+3, bbox_bottom+yspeed+1, bbox_right-3, bbox_bottom+yspeed+1,obj_tile16x16,true,false);

if !colide_estrutura && subir == 0{
    yspeed += grav;
}

if yspeed >= yspeed_max{
    yspeed = yspeed_max;
}

if colide_estrutura || colide_rampa || bloco_invs && !na_agua{ 
    mask_index = spr_mask2;
    global.no_chao = 1;
    pulo = 0;
    xspeed = 0;
    yspeed = 0;
    y = yprevious;
    em_pe = true;
}
y += yspeed;

RandomCarlos

Número de Mensagens : 3
Data de inscrição : 29/10/2011
Reputação : 1
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0

Voltar ao Topo Ir em baixo

Re: Estranho problema com colisão

Mensagem por GameMakerTutoriais em Qua 09 Jan 2013, 16:20


Tudo bem, amigo?

Esse código tá em qual evento (beginstep, endstep, step, trigger...)? Ele realmente "trava" (fica estático um tempinho) ou dá uma "tremidinha"?

Abraço.

GameMakerTutoriais

Número de Mensagens : 800
Data de inscrição : 29/01/2011
Reputação : 26
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   : 0
   : 0
   : 0

Voltar ao Topo Ir em baixo

Re: Estranho problema com colisão

Mensagem por saim em Qui 10 Jan 2013, 09:43

RandomCarlos escreveu:
Código:
colide_estrutura = collision_line(bbox_left+3, bbox_bottom+yspeed+1, bbox_right-3, bbox_bottom+yspeed+1,obj_tile16x16,true,false);
(...)
if colide_estrutura { 
    mask_index = spr_mask2;
    global.no_chao = 1;
    pulo = 0;
    xspeed = 0;
    yspeed = 0; //queria ter negrito pra dar ênfase aqui
    y = yprevious;
    em_pe = true;
}
y += yspeed;

Eu ia remover os argumentos, mas eles são importantes.
Você diz assim: se vai colidir no próximo step, então congela tudo. A distância antes da colisão pode ser tão grande quanto yspeed+1.
Uma saída é usar o move_contact, que eu não sei usar, então não vou dar pitaco.
Outra é usar o while e andar pixel-a-pixel.

Código:
while (!place_meeting(x, y+1, obj_tile16x16)){
y += 1;
}
//claro que é preciso tomar cuidado e garantir que esse código só vai ser usado quando HOUVER uma colisão

saim

Ranking : Nota B
Número de Mensagens : 2964
Idade : 38
Data de inscrição : 14/01/2011
Notas recebidas : C-D-A-B
Reputação : 121
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   : 1
   : 0
   : 3

Voltar ao Topo Ir em baixo

Re: Estranho problema com colisão

Mensagem por Jiraya em Qui 10 Jan 2013, 10:24

eu uso este código para uma detecção precisa
Código:

//Movimentação
hspeed=(keyboard_check(vk_right)-keyboard_check(vk_left))*8;
if(keyboard_check_pressed(vk_up))vspeed=-24;
//deteção automatica
if(!place_meeting(x,y+vspeed+1,ObjetoSolido))gravity=1;else{gravity=0;vspeed=0;}
if(place_meeting(x+hspeed,y+vspeed,ObjetoSolido))
{
var ds,dr,i;
ds=point_distance(x,y,x+hspeed,y+vspeed);
dr=point_direction(x,y,x+hspeed,y+vspeed);
for(i=ds;place_meeting(x+lengthdir_x(i,dr),y+lengthdir_y(i,dr),ObjetoSolido);i-=1)continue;
x+=lengthdir_x(i,dr);y+=lengthdir_y(i,dr);
hspeed=0;
}

Jiraya

Ranking : Nota A
Número de Mensagens : 1134
Data de inscrição : 20/03/2010
Notas recebidas : A+A
Reputação : 108
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   : 1
   : 0
   : 1

https://www.facebook.com/seito.washiro.7

Voltar ao Topo Ir em baixo

Re: Estranho problema com colisão

Mensagem por saim em Qui 10 Jan 2013, 13:22

Jiraya escreveu:
Código:

for(i=ds;place_meeting(x+lengthdir_x(i,dr),y+lengthdir_y(i,dr),ObjetoSolido);i-=1)continue;
Caramba, nunca tinha visto um for escrito desse jeito. Demorei pra entender. Genial! Sem nenhum comando dentro do for, você consegue atingir seu objetivo!

Mas estranhei a diferença dos argumentos nas colisões. No for, você usa (x + deslocamento, y + deslocamento), mas num if anterior, você usa (x, y + deslocamento + 1).
Jiraya escreveu:
Código:
if(!place_meeting(x,y+vspeed+1,ObjetoSolido))gravity=1;else{gravity=0;vspeed=0;}
Porque?

Ah, e essa linha deveria zerar sua vspeed e gravity, caindo no mesmo problema que o RandomCarlos está experimentando. Porque não acontece?
[Edit:] saquei. No step seguinte, com vspeed = 0 e o objeto no ar, a gravity vai ser ativada. Mas não acontece do objeto desacelerar logo antes da colisão?

saim

Ranking : Nota B
Número de Mensagens : 2964
Idade : 38
Data de inscrição : 14/01/2011
Notas recebidas : C-D-A-B
Reputação : 121
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   : 1
   : 0
   : 3

Voltar ao Topo Ir em baixo

Re: Estranho problema com colisão

Mensagem por theguitarmester em Qui 10 Jan 2013, 13:29

Saim, Está com o Mesmo Erro que há no Padrão do Gamemaker, a Desaceleração. Porém é só quando está se Movimentando para os Lados.

RandomCarlos, acredito que o Code do Jiraya Seja sua Solução.

theguitarmester

Ranking : Sem avaliações
Número de Mensagens : 1908
Idade : 21
Data de inscrição : 28/02/2012
Notas recebidas : B
Reputação : 80
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 1
Prêmios
   : 2
   : 2
   : 1

http://guitarmester.no.comunidades.net/index.php?pagina=19362978

Voltar ao Topo Ir em baixo

Re: Estranho problema com colisão

Mensagem por Conteúdo patrocinado Hoje à(s) 11:49


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