Entrar
Últimos assuntos
» Como ajustar velocidade de cada frame da animação no game makerpor 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
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
|
|