Entrar
Últimos assuntos
» player não consegue andarpor 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
Problema de colisão
5 participantes
Página 1 de 1
Problema de colisão
Olá, tive um pequeno problema 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:
È 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
}
- 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)
}
Riccardoric- Data de inscrição : 17/06/2014
Reputação : 34
Número de Mensagens : 206
Prêmios :
x 0 x 0 x 0
x 0 x 0 x 0
x 0 x 0 x 0
Re: Problema de colisão
no obj inimigo, coloque um evento de colisão com o bloco chão e o codigo :
não esqueça de marcar o obj_chão como solid...
- Código:
move_contact_solid(direction,12);
vspeed=0;
não esqueça de marcar o obj_chão como solid...
biscoito- Data de inscrição : 07/06/2008
Reputação : 3
Número de Mensagens : 181
Prêmios :
x 0 x 0 x 0
x 0 x 0 x 0
x 0 x 0 x 0
Re: Problema de colisão
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
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- Data de inscrição : 17/06/2014
Reputação : 34
Número de Mensagens : 206
Prêmios :
x 0 x 0 x 0
x 0 x 0 x 0
x 0 x 0 x 0
Re: Problema de colisão
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?
edit: como assim? teletransporta ele pra onde?
biscoito- Data de inscrição : 07/06/2008
Reputação : 3
Número de Mensagens : 181
Prêmios :
x 0 x 0 x 0
x 0 x 0 x 0
x 0 x 0 x 0
Re: Problema de colisão
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
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- Data de inscrição : 17/06/2014
Reputação : 34
Número de Mensagens : 206
Prêmios :
x 0 x 0 x 0
x 0 x 0 x 0
x 0 x 0 x 0
Re: Problema de colisão
tente isso, troque seu codigo por isso:
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)) //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)
}
- 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- Data de inscrição : 07/06/2008
Reputação : 3
Número de Mensagens : 181
Prêmios :
x 0 x 0 x 0
x 0 x 0 x 0
x 0 x 0 x 0
Re: Problema de colisão
No lugar de move_towards_point use mp_potential_step
Ainda existe a função mp_potential_settings serve para configurar melhor a função anterior
OBS: Marque os obstaculos como Solido
- 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
Re: Problema de colisão
- 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)
#####################################################################
Riccardoric- Data de inscrição : 17/06/2014
Reputação : 34
Número de Mensagens : 206
Prêmios :
x 0 x 0 x 0
x 0 x 0 x 0
x 0 x 0 x 0
Re: Problema de colisão
O GMS está acusando erro de variável sem valor:
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!
http://docs.yoyogames.com/source/dadiospice/002_reference/movement%20and%20collisions/motion%20planning/mp_potential_step.html
- 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!
http://docs.yoyogames.com/source/dadiospice/002_reference/movement%20and%20collisions/motion%20planning/mp_potential_step.html
Re: Problema de colisão
Agora deu erro no Stepsize
EDIT// Ah não entendi para que serve, n tinha percebido o link la embaixo Vlw mas mesmo assim ele consegue atravessar as paredes... mas não tem problema sei como usar esse bug ;) vlw para todos
- Código:
mp_potential_step(x,y,stepsize,true)
EDIT// Ah não entendi para que serve, n tinha percebido o link la embaixo Vlw mas mesmo assim ele consegue atravessar as paredes... mas não tem problema sei como usar esse bug ;) vlw para todos
Riccardoric- Data de inscrição : 17/06/2014
Reputação : 34
Número de Mensagens : 206
Prêmios :
x 0 x 0 x 0
x 0 x 0 x 0
x 0 x 0 x 0
Re: Problema de colisão
Você marcou o obj_parede como sólido?
sobre stepSize coloque a 'velocidade' em píxeis que você quer que o player se movimente.
sobre stepSize coloque a 'velocidade' em píxeis que você quer que o player se movimente.
Re: Problema de colisão
Eu já consegui esqueci de avisar, graças a voces, Vlw
Riccardoric- Data de inscrição : 17/06/2014
Reputação : 34
Número de Mensagens : 206
Prêmios :
x 0 x 0 x 0
x 0 x 0 x 0
x 0 x 0 x 0
Re: Problema de colisão
Riccardoric escreveu:Agora deu erro no Stepsizedesculpem mas sou ainda nub é para trocar com o que?
- Código:
mp_potential_step(x,y,stepsize,true)
EDIT// Ah não entendi para que serve, n tinha percebido o link la embaixo Vlw 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
Re: Problema de colisão
Vlw man mas consegui agora 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
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 é isso que estava falando
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 é isso que estava falando
Última edição por Riccardoric em Sáb 05 Jul 2014, 14:49, editado 1 vez(es)
Riccardoric- Data de inscrição : 17/06/2014
Reputação : 34
Número de Mensagens : 206
Prêmios :
x 0 x 0 x 0
x 0 x 0 x 0
x 0 x 0 x 0
Re: Problema de colisão
Riccardoric escreveu:Vlw man mas consegui agora 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
Adiciona ao STEP do inimigo o evento BOUNCE, para evitar que ele fique preso na colisão.
WellingtonBecker- Games Ranking :
Notas recebidas : D
Data de inscrição : 09/05/2013
Reputação : 105
Número de Mensagens : 824
Prêmios :
x 0 x 0 x 0
x 0 x 0 x 0
x 0 x 0 x 0
Re: Problema de colisão
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...
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...
Re: Problema de colisão
Já ta em true vou te mostrar o code
- Código:
mp_potential_step(x,y,5,true)
Riccardoric- Data de inscrição : 17/06/2014
Reputação : 34
Número de Mensagens : 206
Prêmios :
x 0 x 0 x 0
x 0 x 0 x 0
x 0 x 0 x 0
Página 1 de 1
Permissões neste sub-fórum
Não podes responder a tópicos