GMBR
Gostaria de reagir a esta mensagem? Crie uma conta em poucos cliques ou inicie sessão para continuar.
Entrar

Esqueci-me da senha

Últimos assuntos
» player não consegue andar
por 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

Ir para baixo

inimigo - Inimigo Seguir o Player e Uma coisa a mais... Empty Inimigo Seguir o Player e Uma coisa a mais...

Mensagem por Marvin Unmei Qua 07 Abr 2021, 19:32

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.
Marvin Unmei
Marvin Unmei

Games Ranking : Sem avaliações

Data de inscrição : 07/04/2021
Reputação : 0
Número de Mensagens : 1
Prêmios : inimigo - Inimigo Seguir o Player e Uma coisa a mais... Empty

Medalhas x 0 Tutoriais x 0 Moedas x 0

Ouro x 0 Prata x 0 Bronze x 0

Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Plataformas :
  • Game Maker 8.0 ou 8.1
  • Unity
  • C#
  • Unreal
  • RPG Maker


Ir para o topo Ir para baixo

inimigo - Inimigo Seguir o Player e Uma coisa a mais... Empty Re: Inimigo Seguir o Player e Uma coisa a mais...

Mensagem por makgamer Sex 09 Abr 2021, 10:11

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:
Código:
mp_potential_step(Obj_Bomb.x,Obj_Bomb.y,8,false);

Espero ter ajudado.
makgamer
makgamer

Games Ranking : Nota D

Notas recebidas : D
Data de inscrição : 29/03/2009
Reputação : 7
Número de Mensagens : 941
Prêmios : inimigo - Inimigo Seguir o Player e Uma coisa a mais... Empty

Medalhas x 0 Tutoriais x 0 Moedas x 0

Ouro x 0 Prata x 1 Bronze x 0

Insignia 1 x 0 Insignia 2 x 0 Insignia 3 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


Ir para o topo Ir para baixo

inimigo - Inimigo Seguir o Player e Uma coisa a mais... Empty Re: Inimigo Seguir o Player e Uma coisa a mais...

Mensagem por saim Seg 19 Abr 2021, 08:47

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.
saim
saim

Games Ranking : Nota B

Notas recebidas : C-D-A-B
Data de inscrição : 14/01/2011
Reputação : 136
Número de Mensagens : 3033
Prêmios : inimigo - Inimigo Seguir o Player e Uma coisa a mais... Empty

Medalhas x 1 Tutoriais x 6 Moedas x 0

Ouro x 1 Prata x 0 Bronze x 3

Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0

makgamer, NPH, theguitarmester e DJM_JM gostam desta mensagem

Ir para o topo Ir para baixo

inimigo - Inimigo Seguir o Player e Uma coisa a mais... Empty Re: Inimigo Seguir o Player e Uma coisa a mais...

Mensagem por DJM_JM Ter 20 Abr 2021, 17:04

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. Happy
DJM_JM
DJM_JM

Games Ranking : Sem avaliações

Data de inscrição : 07/07/2015
Reputação : 0
Número de Mensagens : 49
Prêmios : inimigo - Inimigo Seguir o Player e Uma coisa a mais... Empty

Medalhas x 0 Tutoriais x 0 Moedas x 0

Ouro x 0 Prata x 0 Bronze x 0

Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0

https://djmjm.itch.io/

Ir para o topo Ir para baixo

inimigo - Inimigo Seguir o Player e Uma coisa a mais... Empty Re: Inimigo Seguir o Player e Uma coisa a mais...

Mensagem por makgamer Ter 27 Abr 2021, 22:39

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
makgamer

Games Ranking : Nota D

Notas recebidas : D
Data de inscrição : 29/03/2009
Reputação : 7
Número de Mensagens : 941
Prêmios : inimigo - Inimigo Seguir o Player e Uma coisa a mais... Empty

Medalhas x 0 Tutoriais x 0 Moedas x 0

Ouro x 0 Prata x 1 Bronze x 0

Insignia 1 x 0 Insignia 2 x 0 Insignia 3 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


Ir para o topo Ir para baixo

inimigo - Inimigo Seguir o Player e Uma coisa a mais... Empty Re: Inimigo Seguir o Player e Uma coisa a mais...

Mensagem por Conteúdo patrocinado


Conteúdo patrocinado


Ir para o topo Ir para baixo

Ir para o topo

- Tópicos semelhantes

 
Permissões neste sub-fórum
Não podes responder a tópicos