Obrigado por visitar a The Game Makers Brasil 😁 Use o fórum de Dúvidas para fazer perguntas. Se está em busca de aprender dê uma olhada nos tutoriais.

Problema com IA do inimigo

Perguntas? A comunidade te ajuda a resolver.
Avatar do usuário
rafarp23
Membro
Membro
Reações: 0
Mensagens: 45
Localização: São José do Rio Preto, SP

Problema com IA do inimigo

Mensagem por rafarp23 » Qua Dez 26, 2018 6:34 pm

Bom pessoal, estou com um problema no IA do inimigo, caso alguém possa me ajudar agradeço muito.
É o seguinte, eu uso path e mpgrid para que o inimigo possa seguir o jogador e desviar dos obstaculos!

Tem o mp_grid_add_instances para o block, o npc e o inimigo Slime! O problema é que se eu coloco no Lion, o mp_grid_add_instances
para que ele desvie do mesmo, ele fica parado, pois é como se ele fosse uma colissão, e se tiro o mp_grid_add_instances dele mesmo, ele não se desvia do mesmo e quanto os dois está em direção do jogador, eles travão.

Então gostária de um método para que quando os dois inimigos Lion estiver me seguinte ou mesmo perto de mim, um se desviace do outro para me atacar sem travar um no outro.

Agradeço qualquer ajuda!
]-- [RagnumWorld] --
Em breve!!!

Avatar do usuário
None
Colaborador
Colaborador
Reações: 2
Mensagens: 286

Re: Problema com IA do inimigo

Mensagem por None » Qua Dez 26, 2018 10:04 pm

Porque você não faz com que o inimigo crie o mp_grid nele mesmo (parece que você está criando um global) e cada inimigo cuida de seu próprio path?
Tutorial de jogo de plataforma completo: https://youtu.be/MMUy_bMKqPk
Como criar um jogo de RPG Japonês no estilo Final Fantasy https://goo.gl/efr6fx

Avatar do usuário
rafarp23
Membro
Membro
Reações: 0
Mensagens: 45
Localização: São José do Rio Preto, SP

Re: Problema com IA do inimigo

Mensagem por rafarp23 » Qui Dez 27, 2018 3:01 pm

None escreveu:Porque você não faz com que o inimigo crie o mp_grid nele mesmo (parece que você está criando um global) e cada inimigo cuida de seu próprio path?
Então, eu não uso global nele.

o Crate dele está:

Código: Selecionar todos

grid1 = mp_grid_create(0,0,room_width/5,room_height/5,5,5);
path1 = path_add();
e o step:

Código: Selecionar todos

mp_grid_add_instances(grid1,obj_collision,true);
mp_grid_add_instances(grid1,obDog,true);
mp_grid_add_instances(grid1,obSlime,true);
mp_grid_add_instances(grid1,obSkeleton,true);

mp_grid_path(grid1,path1,x,y,obj_player.x,obj_player.y,false);
path_start(path1,spd,"",false);
se eu coloco o mp_grid_add_instances(grid1,obLion,true); para que ele desvie dele mesmo, ele não anda.
]-- [RagnumWorld] --
Em breve!!!

Avatar do usuário
None
Colaborador
Colaborador
Reações: 2
Mensagens: 286

Re: Problema com IA do inimigo

Mensagem por None » Sex Dez 28, 2018 11:02 pm

Desculpe pela demora.

Eu teria que testar o código aqui para confirmar qual é o problema, mas me parece que você está se bloqueando.
O que você pode fazer é não colocar ele na lista de objetos a serem evitados (note que mesmo Ragnarok não faz isso), se você ainda quer evitar que os inimigos virem 1 só naquele mob, há algumas formas, uma delas é criar um user event para adicionar uma instância no mp_grid, aí você iria chegar checar se há outro inimigo seguindo o player e então adicionar a INSTÂNCIA deste inimigo e não o objeto dele.

Outra é simplesmente adicionar um código de colisão com empurrão no inimigo, se um bater no outro eles se empurram (bem pouquinho) para direções opostas.
Tutorial de jogo de plataforma completo: https://youtu.be/MMUy_bMKqPk
Como criar um jogo de RPG Japonês no estilo Final Fantasy https://goo.gl/efr6fx

Avatar do usuário
rafarp23
Membro
Membro
Reações: 0
Mensagens: 45
Localização: São José do Rio Preto, SP

Re: Problema com IA do inimigo

Mensagem por rafarp23 » Sáb Dez 29, 2018 7:54 pm

Tipo, o problema é que, se eu coloco o add_instance do Oblion nele mesmo, ele não anda, eu gostária q ele desviace dle mesmo caso tenha mais dele no mapa.
]-- [RagnumWorld] --
Em breve!!!

Avatar do usuário
None
Colaborador
Colaborador
Reações: 2
Mensagens: 286

Re: Problema com IA do inimigo

Mensagem por None » Sáb Dez 29, 2018 8:40 pm

Então, eu te disse como fazer isso, ao invés de adicionar o objeto, você adiciona a instância dele com exceção de quem está executando o código.

Há diversas maneiras de checar o id de instâncias na Room, uma forma simples é criar uma ds_list global sempre e o objeto se adiciona nesta lista no momento de criação e no momento de destruição ele se retira da lista.
Tutorial de jogo de plataforma completo: https://youtu.be/MMUy_bMKqPk
Como criar um jogo de RPG Japonês no estilo Final Fantasy https://goo.gl/efr6fx

Avatar do usuário
rafarp23
Membro
Membro
Reações: 0
Mensagens: 45
Localização: São José do Rio Preto, SP

Re: Problema com IA do inimigo

Mensagem por rafarp23 » Sáb Dez 29, 2018 9:55 pm

None escreveu:Então, eu te disse como fazer isso, ao invés de adicionar o objeto, você adiciona a instância dele com exceção de quem está executando o código.

Há diversas maneiras de checar o id de instâncias na Room, uma forma simples é criar uma ds_list global sempre e o objeto se adiciona nesta lista no momento de criação e no momento de destruição ele se retira da lista.
Não sou muito bem com códigos, voltei faz pouco tempo a usar o gms.
]-- [RagnumWorld] --
Em breve!!!

Avatar do usuário
None
Colaborador
Colaborador
Reações: 2
Mensagens: 286

Re: Problema com IA do inimigo

Mensagem por None » Sáb Dez 29, 2018 10:40 pm

Quando você adiciona no mp_grid obj_inimigox
Você está considerando todas as instâncias deste objeto, inclusive quem esta rodando o código.

Porém você pode criar uma ds_list com todas as instâncias de inimigos na Room, basta colocar no create de Ada inimigo o comando de adicionar um objeto à uma ds_lst com o self, se eu não me engano o código fica mais ou menos
ds_list_add(lista, self);

Pronto, besta lista terão todos os inimigos da Room, (você está usando o GMS2 neh?) no Clean up você coloca o ds_list_remove(lista, self) para ele se remover da lista, e por sua vez no Room end você destrói a lista e o Room start você cria a lista.
Já no objeto você vai vai fazer com que ele adicione todo mundo menos ele na lista, então você roda um laço de repetição pela lista adicionando cada elemento dela no mp_grid quando o valor da lista for diferente de self. Assim ele não se adiciona à mp_grid.

Creio que a explicação ficou clara agora, estou no celular e sem muito ânimo de pegar o computador, desculpe.
Tutorial de jogo de plataforma completo: https://youtu.be/MMUy_bMKqPk
Como criar um jogo de RPG Japonês no estilo Final Fantasy https://goo.gl/efr6fx

Avatar do usuário
rafarp23
Membro
Membro
Reações: 0
Mensagens: 45
Localização: São José do Rio Preto, SP

Re: Problema com IA do inimigo

Mensagem por rafarp23 » Dom Dez 30, 2018 9:14 am

Então none, o ds_list eu consigo até add, mas n sei como adicionar as instancias para q o inimigo, caso tenha 2 na room, um desvie do outro sem travar com o mpgrid_add_intances..
]-- [RagnumWorld] --
Em breve!!!

Avatar do usuário
None
Colaborador
Colaborador
Reações: 2
Mensagens: 286

Re: Problema com IA do inimigo

Mensagem por None » Dom Dez 30, 2018 10:54 am

O código fica mais ou menos assim

var size = ds_list_size()
for (var i = 0; i < size; i++)
{
If (ds_list_find_value(lista, i) != self)
{
código para adicionar o objeto à mp_grid
}
}

No clean up você faz
var pos = ds_list_find_index(lista, self)
ds_list_delete(lista, pos)

O ideal é rodar o código de adição à mp grid em um user event e não no create já que você precisa ter certeza que todos os objetos já foram instanciado para só então adicioná-los à grid

Aliás, para deixar seu código melhor te aconselho a pesquisar sobre acessores no game maker
Tutorial de jogo de plataforma completo: https://youtu.be/MMUy_bMKqPk
Como criar um jogo de RPG Japonês no estilo Final Fantasy https://goo.gl/efr6fx

Avatar do usuário
rafarp23
Membro
Membro
Reações: 0
Mensagens: 45
Localização: São José do Rio Preto, SP

Re: Problema com IA do inimigo

Mensagem por rafarp23 » Dom Dez 30, 2018 1:35 pm

None escreveu:O código fica mais ou menos assim

var size = ds_list_size()
for (var i = 0; i < size; i++)
{
If (ds_list_find_value(lista, i) != self)
{
código para adicionar o objeto à mp_grid
}
}

No clean up você faz
var pos = ds_list_find_index(lista, self)
ds_list_delete(lista, pos)

O ideal é rodar o código de adição à mp grid em um user event e não no create já que você precisa ter certeza que todos os objetos já foram instanciado para só então adicioná-los à grid

Aliás, para deixar seu código melhor te aconselho a pesquisar sobre acessores no game maker
Entendi, ai esse código eu coloco no inimigo né? E outra, ele vai se desviar dele mesmo caso haja outro na room?
]-- [RagnumWorld] --
Em breve!!!

Avatar do usuário
None
Colaborador
Colaborador
Reações: 2
Mensagens: 286

Re: Problema com IA do inimigo

Mensagem por None » Dom Dez 30, 2018 8:16 pm

Ele vai desviar de outras instâncias dele (em teoria, eu nunca tentei fazer isso ._.), então se tem 4 Porings na room ele vai desviar de 3 (não dele mesmo).
E neste caso se houver 3 Porings 2 pupas e 1 fabre, ele vai desviar de todos eles.
Tutorial de jogo de plataforma completo: https://youtu.be/MMUy_bMKqPk
Como criar um jogo de RPG Japonês no estilo Final Fantasy https://goo.gl/efr6fx

Responder

Quem está online

Usuários navegando neste fórum: Nenhum usuário registrado e 5 visitantes