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
» Como ajustar velocidade de cada frame da animação no game maker
por Ralphed Ontem à(s) 18:28

» PROBLEMAS COM FÍSICAS DE ÁGUA
por aminaro Ter 16 Abr 2024, 10:07

» Retorno da GMBR!!!
por Ralphed Sex 12 Abr 2024, 22:45

» JOGADOR PARANDO NO AR QUANDO ATACA
por aminaro Qua 10 Abr 2024, 13:51

» Problemas com texto interativo
por Kaaru72 Dom 07 Abr 2024, 11:31

» Erro escondido e indecifrável
por dev_gabize.azv Qui 04 Abr 2024, 10:11

» Mudar cor de apenas uma palavra
por Ralphed Sáb 30 Mar 2024, 00:39

» Procuro Programador de game maker
por Wou Sex 15 Mar 2024, 10:27

» Mod APK
por gamerainha Qua 13 Mar 2024, 06:30

» Aceito pedidos de sprites (Com exemplos meus)
por Sevilha Qua 28 Fev 2024, 12:17

» Inventário simples
por Isquilo_Roedor Qui 22 Fev 2024, 15:18

» Problemas na programaçnao de inimigo [jogo DOOM LIKE]
por Black Mirror Dom 11 Fev 2024, 13:34

» ANDROID MULTI TOUCH
por DiegoBr Dom 04 Fev 2024, 12:13

» Servidor de Discord do fórum?
por Lighter Sáb 27 Jan 2024, 17:18

» Save e Load Json
por Klinton Rodrigues Qui 25 Jan 2024, 11:12

» Colisão com mais de um objeto
por aminaro Seg 22 Jan 2024, 15:02

» Oi sou novo aqui
por Thiago Silveira Alexandre Sáb 20 Jan 2024, 20:55

» Como acessar conteudo comprado no marketplace
por macmilam Sex 19 Jan 2024, 07:42

» Devlogs em vídeos do Block Room
por Joton Seg 15 Jan 2024, 16:56

» Alguém aqui já ganha dinheiro com seus games?
por Joton Seg 15 Jan 2024, 16:49

» ACERVO GMBR MAGAZINE
por Joton Qui 11 Jan 2024, 19:21

» como aumentar o obj sem aumentar a colisão??
por GabrielXavier Qua 10 Jan 2024, 07:21

» Asteroid Core - Early Acesse Update [0.2.0.0]
por JOZ. Seg 08 Jan 2024, 14:39

» Versionamento de código com GitHub
por GabrielXavier Seg 08 Jan 2024, 07:32

» Rio Rise - novo launcher do Gta San Andreas SAMP Brasil
por kolesovsup Sex 29 Dez 2023, 07:16


Inimigo Seguir o Player e Uma coisa a mais...

4 participantes

Ir para baixo

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