o Crate dele está:
e o step:
se eu coloco o mp_grid_add_instances(grid1,obLion,true); para que ele desvie dele mesmo, ele não anda.
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
Problema com IA do inimigo
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!
É 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!!!
Em breve!!!
Re: Problema com IA do inimigo
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
Como criar um jogo de RPG Japonês no estilo Final Fantasy https://goo.gl/efr6fx
Re: Problema com IA do inimigo
Então, eu não uso global nele.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?
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();
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);
]-- [RagnumWorld] --
Em breve!!!
Em breve!!!
Re: Problema com IA do inimigo
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.
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
Como criar um jogo de RPG Japonês no estilo Final Fantasy https://goo.gl/efr6fx
Re: Problema com IA do inimigo
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!!!
Em breve!!!
Re: Problema com IA do inimigo
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.
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
Como criar um jogo de RPG Japonês no estilo Final Fantasy https://goo.gl/efr6fx
Re: Problema com IA do inimigo
Não sou muito bem com códigos, voltei faz pouco tempo a usar o gms.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.
]-- [RagnumWorld] --
Em breve!!!
Em breve!!!
Re: Problema com IA do inimigo
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.
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
Como criar um jogo de RPG Japonês no estilo Final Fantasy https://goo.gl/efr6fx
Re: Problema com IA do inimigo
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!!!
Em breve!!!
Re: Problema com IA do inimigo
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
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
Como criar um jogo de RPG Japonês no estilo Final Fantasy https://goo.gl/efr6fx
Re: Problema com IA do inimigo
Entendi, ai esse código eu coloco no inimigo né? E outra, ele vai se desviar dele mesmo caso haja outro na room?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
]-- [RagnumWorld] --
Em breve!!!
Em breve!!!
Re: Problema com IA do inimigo
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.
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
Como criar um jogo de RPG Japonês no estilo Final Fantasy https://goo.gl/efr6fx
Quem está online
Usuários navegando neste fórum: Nenhum usuário registrado e 4 visitantes