Página 1 de 1
Problema com IA do inimigo
Enviado: Qua Dez 26, 2018 6:34 pm
por rafarp23
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!
Re: Problema com IA do inimigo
Enviado: Qua Dez 26, 2018 10:04 pm
por None
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?
Re: Problema com IA do inimigo
Enviado: Qui Dez 27, 2018 3:01 pm
por rafarp23
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.
Re: Problema com IA do inimigo
Enviado: Sex Dez 28, 2018 11:02 pm
por None
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.
Re: Problema com IA do inimigo
Enviado: Sáb Dez 29, 2018 7:54 pm
por rafarp23
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.
Re: Problema com IA do inimigo
Enviado: Sáb Dez 29, 2018 8:40 pm
por None
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.
Re: Problema com IA do inimigo
Enviado: Sáb Dez 29, 2018 9:55 pm
por rafarp23
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.
Re: Problema com IA do inimigo
Enviado: Sáb Dez 29, 2018 10:40 pm
por None
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.
Re: Problema com IA do inimigo
Enviado: Dom Dez 30, 2018 9:14 am
por rafarp23
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..
Re: Problema com IA do inimigo
Enviado: Dom Dez 30, 2018 10:54 am
por None
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
Re: Problema com IA do inimigo
Enviado: Dom Dez 30, 2018 1:35 pm
por rafarp23
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?
Re: Problema com IA do inimigo
Enviado: Dom Dez 30, 2018 8:16 pm
por None
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.