Conectar-se
Quem está conectado
16 usuários online :: Nenhum usuário registrado, Nenhum Invisível e 16 Visitantes

Nenhum

Ver toda a lista


Compartilhe
Ver o tópico anteriorIr em baixoVer o tópico seguinte
avatar
Ranking : Nota D
Notas recebidas : D
Data de inscrição : 14/02/2010
Número de Mensagens : 911
Insígnias de JAM :

Insignia 1x 0 Insignia 2x 0 Insignia 3x 0
Reputação : 3

Prêmios
   : 0
   : 0
   : 0
Ver perfil do usuário

Problema de colisão

em Sab 26 Abr 2014, 18:32
Eu estou com problemas na colisão do player e a parede no meu jogo(que é estilo TopDown Shooter).

Uso uma mask Redonda no player( que possui um sprite 32x32)e uso x=xprevious e y=yprevious no evento de colisão com a parede.No entanto ao colidir o player não só não consegue se mover, mas sua arma(que é um obj a parte, cujo qual programei para ficar no ponto x e y exato do player) vai um pouco a frente dele, na direção em que ele andava(EX: se ele andar para direita e colidir com uma parede a direita dele, a arma vai um pouco para a direita e fica lá até o player deixar de colidir com ela).

Procurei alguns tutoriais e engines para corrigir isso, mas em sua grande maioria eles são complicados e exigiam uma grande quantidade de mudanças no meu projeto para serem implementados.

Logo, alguém sabe como resolver isso sem precisar de dezenas de modificações no meu jogo?(Ele ja está quase no fim, e uma alteração poderia implicar em uma grande quantidade de coisas que precisariam ser adaptadas, logo me traria um trabalho imenso)
avatar
Ranking : Nota B
Notas recebidas : B-C-A-C
Data de inscrição : 18/09/2008
Número de Mensagens : 2490
Insígnias de JAM :

Insignia 1x 0 Insignia 2x 1 Insignia 3x 0
Reputação : 52

Prêmios
   : 0
   : 2
   : 1
Ver perfil do usuáriohttp://xcreatorgames.weebly.com/

Re: Problema de colisão

em Sab 26 Abr 2014, 18:57
Reputação da mensagem: 100% (1 votos)
Centralize o seu sprite, coloque o "Origin" dele com o X estando no meio e o Y estando no pé. Vê se resolve!
Flws!
avatar
Ranking : Nota D
Notas recebidas : D
Data de inscrição : 14/02/2010
Número de Mensagens : 911
Insígnias de JAM :

Insignia 1x 0 Insignia 2x 0 Insignia 3x 0
Reputação : 3

Prêmios
   : 0
   : 0
   : 0
Ver perfil do usuário

Re: Problema de colisão

em Sab 26 Abr 2014, 19:02
@vinians escreveu:Centralize o seu sprite, coloque o "Origin" dele com o X estando no meio e o Y estando no pé. Vê se resolve!
Flws!
Não entendi esse "Y estando no pé" mas imagino que seja colocar o origin x=16 e y=16.
Só que ja está assim.
avatar
Ranking : Nota B
Notas recebidas : B-C-A-C
Data de inscrição : 18/09/2008
Número de Mensagens : 2490
Insígnias de JAM :

Insignia 1x 0 Insignia 2x 1 Insignia 3x 0
Reputação : 52

Prêmios
   : 0
   : 2
   : 1
Ver perfil do usuáriohttp://xcreatorgames.weebly.com/

Re: Problema de colisão

em Sab 26 Abr 2014, 19:08
Entao o próximo passo seria criar uma máscara para o sprite essa mascara garante uma colisão padrão para o objeto, também desmarque (se já não estiver) "Precise collision check". Crie uma mascara retangular ou oval isso garante que ao virar por exemplo ele mantenha o mesmo padrão de colisão.
Flws!
avatar
Ranking : Nota D
Notas recebidas : D
Data de inscrição : 14/02/2010
Número de Mensagens : 911
Insígnias de JAM :

Insignia 1x 0 Insignia 2x 0 Insignia 3x 0
Reputação : 3

Prêmios
   : 0
   : 0
   : 0
Ver perfil do usuário

Re: Problema de colisão

em Sab 26 Abr 2014, 21:45
@vinians escreveu:Entao o próximo passo seria criar uma máscara para o sprite essa mascara garante uma colisão padrão para o objeto, também desmarque (se já não estiver) "Precise collision check". Crie uma mascara retangular ou oval isso garante que ao virar por exemplo ele mantenha o mesmo padrão de colisão.
Flws!
Eu disse no topico que usou uma mask Circular(Elipse)
e essa opção de Precise collision check ja está desmarcada.
Ranking : Nota C
Notas recebidas : C+B
Data de inscrição : 26/07/2008
Número de Mensagens : 6037
Insígnias de JAM :

Insignia 1x 0 Insignia 2x 0 Insignia 3x 0
Reputação : 288

Prêmios
   :
   :
   :
Ver perfil do usuário

Re: Problema de colisão

em Sab 26 Abr 2014, 22:50
Reputação da mensagem: 100% (1 votos)
O jeito mais fácil é esse:

STEP

Código:
hspeed = (keyboard_check(vk_right)-keyboard_check(vk_left))*5;
vspeed = (keyboard_check(vk_down)-keyboard_check(vk_up))*5;

if (place_free(x+hspeed, y+vspeed))
{
x+=hspeed;
y+=vspeed;
}
else
move_contact_solid(direction, speed);

hspeed=0;
vspeed=0;

O que eu fiz? Usei um truque para a partir de hspeed e vspeed calcular o speed e a direction. Assim podemos saber se o movimento será possível. Se não for, então ele move até o sólido, apenas encostando. No final, zeramos hspeed e vspeed para que ele não se mova sozinho.
avatar
Ranking : Nota D
Notas recebidas : D
Data de inscrição : 14/02/2010
Número de Mensagens : 911
Insígnias de JAM :

Insignia 1x 0 Insignia 2x 0 Insignia 3x 0
Reputação : 3

Prêmios
   : 0
   : 0
   : 0
Ver perfil do usuário

Re: Problema de colisão

em Sab 26 Abr 2014, 23:04
@PedroX escreveu:O jeito mais fácil é esse:

STEP

Código:
hspeed = (keyboard_check(vk_right)-keyboard_check(vk_left))*5;
vspeed = (keyboard_check(vk_down)-keyboard_check(vk_up))*5;

if (place_free(x+hspeed, y+vspeed))
{
x+=hspeed;
y+=vspeed;
}
else
move_contact_solid(direction, speed);

hspeed=0;
vspeed=0;

O que eu fiz? Usei um truque para a partir de hspeed e vspeed calcular o speed e a direction. Assim podemos saber se o movimento será possível. Se não for, então ele move até o sólido, apenas encostando. No final, zeramos hspeed e vspeed para que ele não se mova sozinho.
A colisão entre o player e objetos sólidos ficou bem mais suave(continua travando as vezes na parede, mas está bem melhor).

No entando agravou o problema da arma ficar andando a frente da direção em que o player está andando
Ranking : Nota C
Notas recebidas : C+B
Data de inscrição : 26/07/2008
Número de Mensagens : 6037
Insígnias de JAM :

Insignia 1x 0 Insignia 2x 0 Insignia 3x 0
Reputação : 288

Prêmios
   :
   :
   :
Ver perfil do usuário

Re: Problema de colisão

em Sab 26 Abr 2014, 23:23
Coloque +1 na frente, assim:

if (place_free(x+hspeed+1, y+vspeed+1))
avatar
Ranking : Nota D
Notas recebidas : D
Data de inscrição : 14/02/2010
Número de Mensagens : 911
Insígnias de JAM :

Insignia 1x 0 Insignia 2x 0 Insignia 3x 0
Reputação : 3

Prêmios
   : 0
   : 0
   : 0
Ver perfil do usuário

Re: Problema de colisão

em Dom 27 Abr 2014, 10:39
@PedroX escreveu:Coloque +1 na frente, assim:

if (place_free(x+hspeed+1, y+vspeed+1))
A colisão agora está quase perfeita(só fica preso na parede se o player realmente for de encontro a ela,e se esforçar para se prender a ela)
No entando agora(desde o código que usei acima, só que esqueci de dizer) a arma anda um pouco atraz do player(como se estivesse seguindo ele) e em alguns casos, ao colidir com a parede o player se "teleporta" para outra posição(não aleatória)
Ranking : Nota C
Notas recebidas : C+B
Data de inscrição : 26/07/2008
Número de Mensagens : 6037
Insígnias de JAM :

Insignia 1x 0 Insignia 2x 0 Insignia 3x 0
Reputação : 288

Prêmios
   :
   :
   :
Ver perfil do usuário

Re: Problema de colisão

em Dom 27 Abr 2014, 11:07
É que ele se movia para dentro do sólido só por estar encostado.
Código:
hspeed = (keyboard_check(vk_right)-keyboard_check(vk_left))*5;
vspeed = (keyboard_check(vk_down)-keyboard_check(vk_up))*5;

if (speed>0)
{
if (place_free(x+hspeed+1, y+vspeed+1))
{
x+=hspeed;
y+=vspeed;
}
else
move_contact_solid(direction, speed);
speed = 0;
}
avatar
Ranking : Nota D
Notas recebidas : D
Data de inscrição : 14/02/2010
Número de Mensagens : 911
Insígnias de JAM :

Insignia 1x 0 Insignia 2x 0 Insignia 3x 0
Reputação : 3

Prêmios
   : 0
   : 0
   : 0
Ver perfil do usuário

Re: Problema de colisão

em Dom 27 Abr 2014, 11:29
O problema dos teleports sumiu mas ainda continua o problema com as armas
avatar
Ranking : Nota B
Notas recebidas : D+B+B+C+A
Data de inscrição : 24/08/2009
Número de Mensagens : 1092
Insígnias de JAM :

Insignia 1x 0 Insignia 2x 0 Insignia 3x 0
Reputação : 31

Prêmios
   : 1
   : 1
   :
Ver perfil do usuário

Re: Problema de colisão

em Dom 27 Abr 2014, 12:03
tente colocar o código da posição da arma no draw.
Ranking : Nota C
Notas recebidas : C+B
Data de inscrição : 26/07/2008
Número de Mensagens : 6037
Insígnias de JAM :

Insignia 1x 0 Insignia 2x 0 Insignia 3x 0
Reputação : 288

Prêmios
   :
   :
   :
Ver perfil do usuário

Re: Problema de colisão

em Dom 27 Abr 2014, 12:10
A arma está indo atrás? Coloque o código de seguir no End Step.

Isso porque o Game Maker internamente faz algo assim:

Código:
for(var i=0; i<total_objetos; i++)
{
objeto(i).step();
}

atualiza posições

for(var i=0; i<total_objetos; i++)
{
objeto(i).end_step();
}

for(var i=0; i<total_objetos; i++)
{
objeto(i).draw();
}

O GM atualiza a posição dos objetos só depois do Step e antes do End Step.

Ou seja, como você move o player no Step e a arma atualiza a posição no Step, ela não irá para a nova posição dele, mas sim para a antiga.

Colocando no End Step ou ainda no Draw, como o Thyago sugeriu, mas aí precisará usar draw_self() [no GM:S], ou draw_sprite() [no GM.x], o player já definiu a sua posição e então ela irá para a posição certa.

Depois vem o Draw, e desenha tudo perfeitamente.

Mais informações:
http://gmbr.forumeiros.com/t6785-xcreator-tutorial-sobre-o-funcionamento-dos-eventos
http://gmbr.forumeiros.com/t20443-mini-tuto-instance-creation-code
http://gmc.yoyogames.com/index.php?showtopic=394983 (bem completo)
avatar
Ranking : Nota D
Notas recebidas : D
Data de inscrição : 14/02/2010
Número de Mensagens : 911
Insígnias de JAM :

Insignia 1x 0 Insignia 2x 0 Insignia 3x 0
Reputação : 3

Prêmios
   : 0
   : 0
   : 0
Ver perfil do usuário

Re: Problema de colisão

em Dom 27 Abr 2014, 17:48
Obrigado pela ajuda.
A colisão ainda não está 100% mas está 85% e isso ja me foi uma ajuda imensa!
avatar
Ranking : Nota A
Notas recebidas : C + B + A + A
Data de inscrição : 08/06/2009
Número de Mensagens : 1846
Insígnias de JAM :

Insignia 1x 0 Insignia 2x 0 Insignia 3x 0
Reputação : 254

Prêmios
   : 2
   : 1
   : 1
Ver perfil do usuáriohttp://willy-gmbr.blogspot.com/

Re: Problema de colisão

em Dom 27 Abr 2014, 18:21
Reputação da mensagem: 100% (1 votos)
Procurei alguns tutoriais e engines para corrigir isso, mas em sua grande maioria eles são complicados e exigiam uma grande quantidade de mudanças no meu projeto para serem implementados.
Apesar disso, não vou deixar de recomendar minha engine, Movimento Limpo. A principio ela deve parecer um pouco complicada (isso se você olhar os scripts), mas, o uso dela não é. Dê uma olhada lá!
Flws... blz
avatar
Ranking : Nota D
Notas recebidas : D
Data de inscrição : 14/02/2010
Número de Mensagens : 911
Insígnias de JAM :

Insignia 1x 0 Insignia 2x 0 Insignia 3x 0
Reputação : 3

Prêmios
   : 0
   : 0
   : 0
Ver perfil do usuário

Re: Problema de colisão

em Dom 27 Abr 2014, 18:27
@Willy escreveu:
Procurei alguns tutoriais e engines para corrigir isso, mas em sua grande maioria eles são complicados e exigiam uma grande quantidade de mudanças no meu projeto para serem implementados.
Apesar disso, não vou deixar de recomendar minha engine, Movimento Limpo. A principio ela deve parecer um pouco complicada (isso se você olhar os scripts), mas, o uso dela não é. Dê uma olhada lá!
Flws... blz
Eu dei uma olhada nela(foi a primeira inclusive).Mas como quero participar desse CQ(que será em pouco tempo, sendo que já não tenho muito tempo disponivel para o Game Maker), não tem como eu estudar ela.
Ver o tópico anteriorVoltar ao TopoVer o tópico seguinte
Permissão deste fórum:
Você não pode responder aos tópicos neste fórum