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
Inimigo Seguir o Player e Uma coisa a mais...
4 participantes
GMBR :: Ensine & Aprenda :: Perguntas e Respostas :: Game Maker :: GMS:Windows
Página 1 de 1
Inimigo Seguir o Player e Uma coisa a mais...
Olá, então, atualmente tenho tentado criar um jogo estilo CS / Valorant só que absurdamente simplificado, comecei hoje e tive meu primeiro problema: Fazer o Inimigo ir até a bomb independente de onde ela esteja e então roubá-la. Depois de muito tentar encontrei esse código:
if (distance_to_object(Obj_Bomb) < 10000)
{movimento = "perseguir";}
if (movimento = "perseguir")
{
move_towards_point(Obj_Bomb.x,Obj_Bomb.y,8 );
}
else{
speed = 0;
}
Mas com ele veio um problema: O Inimigo Atravessa as paredes. Como faço para que ele a contorne???
Obrigado pela Atenção.
if (distance_to_object(Obj_Bomb) < 10000)
{movimento = "perseguir";}
if (movimento = "perseguir")
{
move_towards_point(Obj_Bomb.x,Obj_Bomb.y,8 );
}
else{
speed = 0;
}
Mas com ele veio um problema: O Inimigo Atravessa as paredes. Como faço para que ele a contorne???
Obrigado pela Atenção.
Marvin Unmei- Games Ranking :
Data de inscrição : 07/04/2021
Reputação : 0
Número de Mensagens : 1
Prêmios :
x 0 x 0 x 0
x 0 x 0 x 0
x 0 x 0 x 0
Plataformas :- Game Maker 8.0 ou 8.1
- Unity
- C#
- Unreal
- RPG Maker
Re: Inimigo Seguir o Player e Uma coisa a mais...
A função que vc está querendo é essa:
mp_potential_step(xgoal, ygoal, stepsize, checkall)
Link da Documentação
Essa função faz um objeto tentar chegar a um ponto, evitando obstáculos.
No seu exemplo, considerando que as paredes são marcadas como sólidas, ficaria assim:
Espero ter ajudado.
mp_potential_step(xgoal, ygoal, stepsize, checkall)
Link da Documentação
Essa função faz um objeto tentar chegar a um ponto, evitando obstáculos.
No seu exemplo, considerando que as paredes são marcadas como sólidas, ficaria assim:
- Código:
mp_potential_step(Obj_Bomb.x,Obj_Bomb.y,8,false);
Espero ter ajudado.
makgamer- Games Ranking :
Notas recebidas : D
Data de inscrição : 29/03/2009
Reputação : 7
Número de Mensagens : 941
Prêmios :
x 0 x 0 x 0
x 0 x 1 x 0
x 0 x 0 x 0
Plataformas :- Game Maker 8.0 ou 8.1
- Game Maker Studio 2.0
- Unity
- Java
- C#
- Javascript
- RPG Maker
- C ou C++
- Outros
Re: Inimigo Seguir o Player e Uma coisa a mais...
O plano do @makgamer deve funcionar. Vou só explicar um pouco mais o que ele fez, porque o link da documentação, que ele colocou, não está funcionando (pelo menos para mim).
É o seguinte, o game maker tem umas funções nativas de pathfinding, que é exatamente o que você está procurando: um jeito de tentar chegar a um ponto desviando de objetos. No caso, se não me engano, o inimigo vai desviar dos objetos sólidos (é isso que o argumento "checkall" faz, não é?).
O pathfinding vai desenhar um caminho (path - que já vi deixarem visível, pra fase de testes, mas a memória me falha e não sei dizer como faz) e mandar seu objeto percorrer esse caminho.
Pra entender isso, é bom dar uma lida no que são paths. O pathfinding é uma aplicação "turbinada" dos paths. Resumidamente, como você já deve ter imaginado, os paths são caminhos que você define, por qualquer razão, pro objeto percorrer. Pode ser ida-e-volta, pode repetir o caminho em loop (pulando do ponto final pro inicial) e pode até ser um caminho percorrido só uma vez e acabou, que é o que vai acontecer no seu caso - o inimigo vai chegar à bomba e pronto, não precisa mais manter o caminho na memória (se ele quiser levar a bomba pra algum lugar, pode traçar um novo path, não precisa usar o velho).
Beleza, pode parar de ler aqui.
Se quiser fazer alguma coisa mais interessante, com os pathfinds, você pode criar seu próprio algoritmo e deixar de lado a engine nativa do game maker. Tem um modelo pra isso chamado "A*" (lê-se "A-estrela" ou "A-star"). Quando você entende o A*, você fica capacitado a criar algoritmos que levem em conta muitas condições específicas. Cruzar um terreno pegajoso pode ser mais rápido que dar a volta? Considere a velocidade em cada terreno que o algoritmo passa a levar isso em conta. Os pontos a percorrer não estão alinhadinhos? Você pode colocar cada um dos pontos num mapa personalizado. Por aí vai.
É o seguinte, o game maker tem umas funções nativas de pathfinding, que é exatamente o que você está procurando: um jeito de tentar chegar a um ponto desviando de objetos. No caso, se não me engano, o inimigo vai desviar dos objetos sólidos (é isso que o argumento "checkall" faz, não é?).
O pathfinding vai desenhar um caminho (path - que já vi deixarem visível, pra fase de testes, mas a memória me falha e não sei dizer como faz) e mandar seu objeto percorrer esse caminho.
Pra entender isso, é bom dar uma lida no que são paths. O pathfinding é uma aplicação "turbinada" dos paths. Resumidamente, como você já deve ter imaginado, os paths são caminhos que você define, por qualquer razão, pro objeto percorrer. Pode ser ida-e-volta, pode repetir o caminho em loop (pulando do ponto final pro inicial) e pode até ser um caminho percorrido só uma vez e acabou, que é o que vai acontecer no seu caso - o inimigo vai chegar à bomba e pronto, não precisa mais manter o caminho na memória (se ele quiser levar a bomba pra algum lugar, pode traçar um novo path, não precisa usar o velho).
Beleza, pode parar de ler aqui.
Se quiser fazer alguma coisa mais interessante, com os pathfinds, você pode criar seu próprio algoritmo e deixar de lado a engine nativa do game maker. Tem um modelo pra isso chamado "A*" (lê-se "A-estrela" ou "A-star"). Quando você entende o A*, você fica capacitado a criar algoritmos que levem em conta muitas condições específicas. Cruzar um terreno pegajoso pode ser mais rápido que dar a volta? Considere a velocidade em cada terreno que o algoritmo passa a levar isso em conta. Os pontos a percorrer não estão alinhadinhos? Você pode colocar cada um dos pontos num mapa personalizado. Por aí vai.
saim- Games Ranking :
Notas recebidas : C-D-A-B
Data de inscrição : 14/01/2011
Reputação : 136
Número de Mensagens : 3033
Prêmios :
x 1 x 6 x 0
x 1 x 0 x 3
x 0 x 0 x 0
makgamer, NPH, theguitarmester e DJM_JM gostam desta mensagem
Re: Inimigo Seguir o Player e Uma coisa a mais...
saim escreveu:O plano do @makgamer deve funcionar. Vou só explicar um pouco mais o que ele fez, porque o link da documentação, que ele colocou, não está funcionando (pelo menos para mim).
É o seguinte, o game maker tem umas funções nativas de pathfinding, que é exatamente o que você está procurando: um jeito de tentar chegar a um ponto desviando de objetos. No caso, se não me engano, o inimigo vai desviar dos objetos sólidos (é isso que o argumento "checkall" faz, não é?).
O pathfinding vai desenhar um caminho (path - que já vi deixarem visível, pra fase de testes, mas a memória me falha e não sei dizer como faz) e mandar seu objeto percorrer esse caminho.
Pra entender isso, é bom dar uma lida no que são paths. O pathfinding é uma aplicação "turbinada" dos paths. Resumidamente, como você já deve ter imaginado, os paths são caminhos que você define, por qualquer razão, pro objeto percorrer. Pode ser ida-e-volta, pode repetir o caminho em loop (pulando do ponto final pro inicial) e pode até ser um caminho percorrido só uma vez e acabou, que é o que vai acontecer no seu caso - o inimigo vai chegar à bomba e pronto, não precisa mais manter o caminho na memória (se ele quiser levar a bomba pra algum lugar, pode traçar um novo path, não precisa usar o velho).
Beleza, pode parar de ler aqui.
Se quiser fazer alguma coisa mais interessante, com os pathfinds, você pode criar seu próprio algoritmo e deixar de lado a engine nativa do game maker. Tem um modelo pra isso chamado "A*" (lê-se "A-estrela" ou "A-star"). Quando você entende o A*, você fica capacitado a criar algoritmos que levem em conta muitas condições específicas. Cruzar um terreno pegajoso pode ser mais rápido que dar a volta? Considere a velocidade em cada terreno que o algoritmo passa a levar isso em conta. Os pontos a percorrer não estão alinhadinhos? Você pode colocar cada um dos pontos num mapa personalizado. Por aí vai.
Boa sugestão. Eu desenvolvi um algoritmo A* em um dos meus antigos projetos aqui, com GML. Usava ds_lists para armazenar os custos e quando encontrava o caminho, retornava um ponto no path recursivamente, até chegar de volta no início. O unico problema é que os pontos no path ficavam invertidos, mas isso foi resolvido facilmente utilizando path_reverse() da gml. Se encontrar o codigo do projeto antigo, posto aqui depois.
Um adendo sobre uma implementação própria do A*, é que provavelmente não vai ser mais eficiente que a já implementada no GML, que é uma solução mais otimizada para a engine. Por isso, salvo em casos raros, vale mais a pena utilizar mp_grids pra desenhar o path, pelo menos no meu antigo projeto, teve desempenho bem melhor em mapas maiores. Se não tiver uma necessidade muito especifica, por via de regra é melhor utilizar o que já existe na engine, poupa esforço e apresenta um resultado melhor, no final das contas.
EDIT: Se o criador do topico quiser testar por curiosidade um algoritmo de pathfinding proprio, vale a pena olhar o algoritmo de menor caminho de dijkstra, é menos eficiente que o A*, mas é um bom ponto de partida, pois é mais fácil de implementar.
Re: Inimigo Seguir o Player e Uma coisa a mais...
saim escreveu:O plano do @makgamer deve funcionar. Vou só explicar um pouco mais o que ele fez, porque o link da documentação, que ele colocou, não está funcionando (pelo menos para mim).
É o seguinte, o game maker tem umas funções nativas de pathfinding, que é exatamente o que você está procurando: um jeito de tentar chegar a um ponto desviando de objetos. No caso, se não me engano, o inimigo vai desviar dos objetos sólidos (é isso que o argumento "checkall" faz, não é?).
O pathfinding vai desenhar um caminho (path - que já vi deixarem visível, pra fase de testes, mas a memória me falha e não sei dizer como faz) e mandar seu objeto percorrer esse caminho.
Pra entender isso, é bom dar uma lida no que são paths. O pathfinding é uma aplicação "turbinada" dos paths. Resumidamente, como você já deve ter imaginado, os paths são caminhos que você define, por qualquer razão, pro objeto percorrer. Pode ser ida-e-volta, pode repetir o caminho em loop (pulando do ponto final pro inicial) e pode até ser um caminho percorrido só uma vez e acabou, que é o que vai acontecer no seu caso - o inimigo vai chegar à bomba e pronto, não precisa mais manter o caminho na memória (se ele quiser levar a bomba pra algum lugar, pode traçar um novo path, não precisa usar o velho).
Beleza, pode parar de ler aqui.
Se quiser fazer alguma coisa mais interessante, com os pathfinds, você pode criar seu próprio algoritmo e deixar de lado a engine nativa do game maker. Tem um modelo pra isso chamado "A*" (lê-se "A-estrela" ou "A-star"). Quando você entende o A*, você fica capacitado a criar algoritmos que levem em conta muitas condições específicas. Cruzar um terreno pegajoso pode ser mais rápido que dar a volta? Considere a velocidade em cada terreno que o algoritmo passa a levar isso em conta. Os pontos a percorrer não estão alinhadinhos? Você pode colocar cada um dos pontos num mapa personalizado. Por aí vai.
Realmente estranho, aqui o link está abrindo perfeitamente
Mas, em todo caso, você explicou muito melhor do que qualquer documentação faria, hehe.
No passado eu já implementei o algoritmo A* em um dos meus projetos, adequando às minhas necessidades esperando um ganho de performance, mas falhei miseravelmente. Como o amigo aqui em cima falou, dificilmente um algoritmo feito em GML vai ganhar em performance do algoritmo nativo feito para a engine.
Ainda assim, recomendo a experiência, é um ótimo aprendizado.
Agradeço por ter complementado minha resposta, acho que fui muito breve mesmo
makgamer- Games Ranking :
Notas recebidas : D
Data de inscrição : 29/03/2009
Reputação : 7
Número de Mensagens : 941
Prêmios :
x 0 x 0 x 0
x 0 x 1 x 0
x 0 x 0 x 0
Plataformas :- Game Maker 8.0 ou 8.1
- Game Maker Studio 2.0
- Unity
- Java
- C#
- Javascript
- RPG Maker
- C ou C++
- Outros
Tópicos semelhantes
» [RESOLVIDO]Fazer o Inimigo seguir o player
» INIMIGO SEGUIR O PLAYER
» Inimigo seguir player em top view
» Problema ao inimigo seguir player
» Engine de inimigo seguir o player
» INIMIGO SEGUIR O PLAYER
» Inimigo seguir player em top view
» Problema ao inimigo seguir player
» Engine de inimigo seguir o player
GMBR :: Ensine & Aprenda :: Perguntas e Respostas :: Game Maker :: GMS:Windows
Página 1 de 1
Permissões neste sub-fórum
Não podes responder a tópicos