Problema de colisão

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

Problema de colisão

Mensagem por Riccardoric em Qua 02 Jul 2014, 21:12

Olá, tive um pequeno problema Laughing e acho que algum de voces vão saber responder...
È o seguinte criei um player, um inimigo e uma room.
Eu coloquei que o inimigo segue o player quando ele for perto de 100 centímetros, o problema é que o inimigo consegue atravessar as paredes O.O tentei colocar algo na colisão mas não da certo :/ fiz alguns tutoriais mais também não da :'( se alguém puder mim ajudar ou ver qual o erro, vou colocar aqui embaixo o que coloquei no inimigo
No step coloquei o seguinte código:
Código:
if hspeed>=0
 {
 sprite_index=inimigo_direita
 }
 if hspeed<=0
 {
 sprite_index=inimigo_esquerda
 }
 if vspeed>=0
 {
 sprite_index=inimigo_baixo
 }
 if vspeed<=0
 {
 sprite_index=inimigo_cima
 }
e um outro código :
Código:
if distance_to_object(player)<100 //se o inimigo estiver a menos de 100 centimetros do player
{
move_towards_point(player.x,player.y,3)
}
Não sei se isso pode servir mas ta ai Happy Obrigado pela atenção .

Riccardoric

Número de Mensagens : 206
Idade : 17
Data de inscrição : 17/06/2014
Reputação : 34
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   : 0
   : 0
   : 0

Voltar ao Topo Ir em baixo

Re: Problema de colisão

Mensagem por biscoito em Qua 02 Jul 2014, 21:29

no obj inimigo, coloque um evento de colisão com o bloco chão e o codigo :
Código:
move_contact_solid(direction,12);
vspeed=0;

não esqueça de marcar o obj_chão como solid...

biscoito

Número de Mensagens : 181
Idade : 20
Data de inscrição : 07/06/2008
Reputação : 3
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   : 0
   : 0
   : 0

Voltar ao Topo Ir em baixo

Re: Problema de colisão

Mensagem por Riccardoric em Qua 02 Jul 2014, 21:32

Na verdade coloquei chão como background '-'
EDIT//
Tentei colocar o code no Objeto parede, só que quando ele colida com a parede faz como um tele transporte O.o


Última edição por Riccardoric em Qua 02 Jul 2014, 21:35, editado 1 vez(es)

Riccardoric

Número de Mensagens : 206
Idade : 17
Data de inscrição : 17/06/2014
Reputação : 34
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   : 0
   : 0
   : 0

Voltar ao Topo Ir em baixo

Re: Problema de colisão

Mensagem por biscoito em Qua 02 Jul 2014, 21:33

então coloca esse codigo na colisão com o objeto que voce nao quer que ele ultrapasse....


edit: como assim? teletransporta ele pra onde?

biscoito

Número de Mensagens : 181
Idade : 20
Data de inscrição : 07/06/2008
Reputação : 3
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   : 0
   : 0
   : 0

Voltar ao Topo Ir em baixo

Re: Problema de colisão

Mensagem por Riccardoric em Qua 02 Jul 2014, 21:42

Tipo quando ele colide com a parede ele vem teletransportado pro outro lado da parede em vez de atravessar
EDIT// deu erro de novo, só que dessa vez ele vem direto em mim e perco


Última edição por Riccardoric em Qua 02 Jul 2014, 21:56, editado 1 vez(es)

Riccardoric

Número de Mensagens : 206
Idade : 17
Data de inscrição : 17/06/2014
Reputação : 34
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   : 0
   : 0
   : 0

Voltar ao Topo Ir em baixo

Re: Problema de colisão

Mensagem por biscoito em Qua 02 Jul 2014, 21:46

tente isso, troque seu codigo por isso:
Código:
if distance_to_object(player)<100 && (place_free(x-4,y)) //se o inimigo estiver a menos de 100 centimetros do player
{
move_towards_point(player.x,player.y,3)
}

EDIT:Acredito que só ira funcionar pra esqerda... então, 2 soluções:
1-Não sei se funciona:
Código:
if distance_to_object(player)<100 && (place_free(x-4,y)) && (place_free(x+4,y)) //se o inimigo estiver a menos de 100 centimetros do player
{
move_towards_point(player.x,player.y,3)
}
2- Você terá que criar variaveis de controle para saber se ele ta indo pra direita ou para a esquerda e ai:
Código:
if distance_to_object(player)<100 && (place_free(x-4,y)) && direita=false//se o inimigo estiver a menos de 100 centimetros do player
{
move_towards_point(player.x,player.y,3)
}
if distance_to_object(player)<100 && (place_free(x+4,y)) && direita=true//se o inimigo estiver a menos de 100 centimetros do player
{
move_towards_point(player.x,player.y,3)
}


Última edição por biscoito em Qua 02 Jul 2014, 21:52, editado 1 vez(es)

biscoito

Número de Mensagens : 181
Idade : 20
Data de inscrição : 07/06/2008
Reputação : 3
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   : 0
   : 0
   : 0

Voltar ao Topo Ir em baixo

Re: Problema de colisão

Mensagem por Witen em Qua 02 Jul 2014, 21:48

No lugar de move_towards_point use mp_potential_step
Código:
mp_potential_step(x,y,stepsize,checkall) Esta função deixa a instância seguir um passo para uma posição particular.
Mas neste caso tenta evitar obstáculos. Quando uma instância
colidiria com uma instância sólida (ou qualquer instância quando checkall
é verdade) mudará a direção de movimento para tentar evitar a instância
e movimenta-se assim. Isto não é garantido para trabalhar, mas na
maioria dos casos fáceis isto irá mover a instância efetivamente para um
objetivo. A função retorna se o objetivo foi alcançado, ou não.

Ainda existe a função mp_potential_settings serve para configurar melhor a função anterior
Código:
mp_potential_settings(maxrot,rotstep,ahead,onspot) Relativa
a função anterior que trabalha usando vários parâmetros que podem ser
mudados usando esta função. Globalmente o método trabalha como
segue. Tenta mover diretamente para o objetivo primeiro. Olha vários
passos à frente que pode ser configurado à frente com o parâmetro
(padrão 3). Reduzindo este valor significam que a instância iniciará
direção variável posteriormente. Aumentando significa que iniciará
direção variável mais cedo. Se este teste conduz a uma colisão que inicia
olhando mais para as direções esquerdas e direitas da melhor direção.
Faz isto em passos de rotstep de tamanho (padrão 10). Reduzindo isto
dá para a instância mais possibilidades de movimento, mas ficará mais
lento. O parâmetro maxrot é um pouco mais difícil explicar. A instância
tem uma direção atual. maxrot (padrão 30) indica quanto é permitido
para mudar sua direção atual em um passo. Então até mesmo se pode
mover, por exemplo, diretamente para a meta só se fará assim se não
viola esta mudança máxima de direção. Se você faz o maxrot maior que
a instância pode mudar em cada passo. Isto se fará mais fácil de achar
um caminho curto, mas o caminho será mais feio. Se você fornecer o
valor menor do caminho será mais macio, mas poderia levar desvios
mais longos (e às vezes até mesmo não acha a meta). Quando nenhum
passo pode ser feito o comportamento depende do valor do parâmetro
onspot. Se onspot é verdade (o valor padrão), a instância girará em seu
lugar pelo valor indicado com maxrot. Se for falso não moverá nada.
Fixando isto para falso é útil para, por exemplo, carros, mas reduz a
chance de achar um caminho.

OBS: Marque os obstaculos como Solido

Witen

Ranking : Sem avaliações
Número de Mensagens : 515
Idade : 17
Data de inscrição : 23/05/2012
Reputação : 36
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   : 0
   : 0
   : 0

http://www.wibix.webs.com

Voltar ao Topo Ir em baixo

Re: Problema de colisão

Mensagem por Riccardoric em Qui 03 Jul 2014, 09:38

Deu erro :/:

___________________________________________
###########################################################################################
FATAL ERROR in
action number 2
of Step Event0
for object Inimigo:

Push :: Execution Error - Variable Get -1.checkall(100000, -1)
at gml_Object_Inimigo_StepNormalEvent_2 (line 1) - mp_potential_step(x,y,stepsize,checkall)
#####################################################################
Acho que não entendi direito como funciona e se preciso trocar algo... "Witen"

Riccardoric

Número de Mensagens : 206
Idade : 17
Data de inscrição : 17/06/2014
Reputação : 34
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   : 0
   : 0
   : 0

Voltar ao Topo Ir em baixo

Re: Problema de colisão

Mensagem por Thomaz em Qui 03 Jul 2014, 09:50

O GMS está acusando erro de variável sem valor:

Código:
Push :: Execution Error - Variable Get -1.checkall(100000, -1)


O que indica que você simplesmente copiou e colou o código dele. =/

Onde ele digitou checkall, são parâmetros da função que você está usando. Nesse caso, a função está pedindo um valor booleano(True ou false).

Substitua Checkall por true (Caso você queira que todos os objetos sejam checados na hora de movimentar) ou false (Caso você queira apenas os objetos sólidos).


Uma dica é apertar f1 e ler o que a função faz! Smile

http://docs.yoyogames.com/source/dadiospice/002_reference/movement%20and%20collisions/motion%20planning/mp_potential_step.html

Thomaz

Ranking : Nota A
Número de Mensagens : 106
Idade : 21
Data de inscrição : 13/10/2011
Notas recebidas : A
Reputação : 4
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   : 0
   : 0
   : 0

http://bigleafeater.tumblr.com/

Voltar ao Topo Ir em baixo

Re: Problema de colisão

Mensagem por Riccardoric em Qui 03 Jul 2014, 10:39

Agora deu erro no Stepsize
Código:
mp_potential_step(x,y,stepsize,true)
desculpem mas sou ainda nub  sorrindo é para trocar com o que?
EDIT// Ah não entendi para que serve, n tinha percebido o link la embaixo Vlw Happy mas mesmo assim ele consegue atravessar as paredes... mas não tem problema sei como usar esse bug ;) vlw para todos

Riccardoric

Número de Mensagens : 206
Idade : 17
Data de inscrição : 17/06/2014
Reputação : 34
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   : 0
   : 0
   : 0

Voltar ao Topo Ir em baixo

Re: Problema de colisão

Mensagem por Thomaz em Sex 04 Jul 2014, 07:47

Você marcou o obj_parede como sólido?

sobre stepSize coloque a 'velocidade' em píxeis que você quer que o player se movimente.

Thomaz

Ranking : Nota A
Número de Mensagens : 106
Idade : 21
Data de inscrição : 13/10/2011
Notas recebidas : A
Reputação : 4
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   : 0
   : 0
   : 0

http://bigleafeater.tumblr.com/

Voltar ao Topo Ir em baixo

Re: Problema de colisão

Mensagem por Riccardoric em Sex 04 Jul 2014, 12:49

Eu já consegui esqueci de avisar, graças a voces, Vlw Happy

Riccardoric

Número de Mensagens : 206
Idade : 17
Data de inscrição : 17/06/2014
Reputação : 34
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   : 0
   : 0
   : 0

Voltar ao Topo Ir em baixo

Re: Problema de colisão

Mensagem por Witen em Sab 05 Jul 2014, 11:06

Riccardoric escreveu:Agora deu erro no Stepsize
Código:
mp_potential_step(x,y,stepsize,true)
desculpem mas sou ainda nub  sorrindo é para trocar com o que?
EDIT// Ah não entendi para que serve, n tinha percebido o link la embaixo Vlw Happy mas mesmo assim ele consegue atravessar as paredes... mas não tem problema sei como usar esse bug ;) vlw para todos

O amigo foi mal esqueci de checar se você tinha resolvido sua duvida.
como o próprio Thomaz disse você tem que preencher os argumentos como você vai la e simplesmente cola o que te passei ><"
OBS: se ainda continua atravessando as paredes e porque você não marcou a parede ou qualquer obstaculo que seja como solido, ainda falei que tinha que fazer isto ><
Se tiver qualquer outra duvida pode falar Happy

Witen

Ranking : Sem avaliações
Número de Mensagens : 515
Idade : 17
Data de inscrição : 23/05/2012
Reputação : 36
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   : 0
   : 0
   : 0

http://www.wibix.webs.com

Voltar ao Topo Ir em baixo

Re: Problema de colisão

Mensagem por Riccardoric em Sab 05 Jul 2014, 14:26

Vlw man mas consegui agora Smile o unico problema é que agora quando ele encosta na parede ele fica meio bloqueado mas acho que isso é porque ele segue o player então se tiver alguma coisa no meio entre eles, o inimigo vai ficar parado tem um jeito para desviar os objetos mas não sei como se faz sorrindo
EDIT// eu fiz isso mas é outra a questão se tipo tiver o inimigo e o player um na frente do outro e um objeto no meio. o inimigo não vai dar a volta do objeto para pegar o player Smile é isso que estava falando


Última edição por Riccardoric em Sab 05 Jul 2014, 14:49, editado 1 vez(es)

Riccardoric

Número de Mensagens : 206
Idade : 17
Data de inscrição : 17/06/2014
Reputação : 34
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   : 0
   : 0
   : 0

Voltar ao Topo Ir em baixo

Re: Problema de colisão

Mensagem por WellingtonBecker em Sab 05 Jul 2014, 14:39

Riccardoric escreveu:Vlw man mas consegui agora Smile o unico problema é que agora quando ele encosta na parede ele fica meio bloqueado mas acho que isso é porque ele segue o player então se tiver alguma coisa no meio entre eles, o inimigo vai ficar parado tem um jeito para desviar os objetos mas não sei como se faz sorrindo

Adiciona ao STEP do inimigo o evento BOUNCE, para evitar que ele fique preso na colisão.

WellingtonBecker

Ranking : Nota D
Número de Mensagens : 820
Idade : 35
Data de inscrição : 09/05/2013
Notas recebidas : D
Reputação : 105
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0

Voltar ao Topo Ir em baixo

Re: Problema de colisão

Mensagem por Witen em Sab 05 Jul 2014, 15:17

mp_potential_step(x,y,stepsize,checkall)
Mude o checkall para true se continuar não contornando, você terá que mudar a função mp_potential_settings de forma que melhore a movimentação da instancia, isso é um pouco mais complicado por isso eu aconselho a ler bem a descrição que postei sobre a função...

Witen

Ranking : Sem avaliações
Número de Mensagens : 515
Idade : 17
Data de inscrição : 23/05/2012
Reputação : 36
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   : 0
   : 0
   : 0

http://www.wibix.webs.com

Voltar ao Topo Ir em baixo

Re: Problema de colisão

Mensagem por Riccardoric em Sab 05 Jul 2014, 17:27

Já ta em true vou te mostrar o code
Código:
mp_potential_step(x,y,5,true)

Riccardoric

Número de Mensagens : 206
Idade : 17
Data de inscrição : 17/06/2014
Reputação : 34
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   : 0
   : 0
   : 0

Voltar ao Topo Ir em baixo

Re: Problema de colisão

Mensagem por Conteúdo patrocinado Hoje à(s) 10:26


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