Entrar
Últimos assuntos
» player não consegue andarpor lovn7 Ontem à(s) 13:33
» É possível fazer istó no game maker
por William Lima Ontem à(s) 10:56
» Rio Rise - novo launcher do Gta San Andreas SAMP Brasil
por Lua Sáb 16 Nov 2024, 20:22
» Cenario longo x Texture Pages
por josuedemoraes Sáb 16 Nov 2024, 15:31
» Kids' band
por Adilson Lucindo Santos Sex 15 Nov 2024, 12:23
» Engasgos-Troca de Sprites/animações
por josuedemoraes Ter 12 Nov 2024, 01:49
» Block Room - DEMO
por Joton Qua 06 Nov 2024, 22:58
» Game Infinito vertical (subindo)
por macmilam Sáb 26 Out 2024, 12:36
» Retorno da GMBR!!!
por Dancity Ter 22 Out 2024, 16:36
» Máquina de estados
por aminaro Qui 10 Out 2024, 13:33
» como faço pra um objeto colidir com o outro e diminuir a vida do player ?
por josuedemoraes Qui 03 Out 2024, 16:51
» RESOLVIDO: Colisão com objetos moveis
por josuedemoraes Qua 02 Out 2024, 20:28
» Crypt of the Blood Moon
por divin sphere Qua 11 Set 2024, 18:18
» como fazer um objeto seguir?
por divin sphere Dom 18 Ago 2024, 18:08
» Procuro de alguém para Modelar/Texturizar/Animar objetos 3D
por un00brn Dom 11 Ago 2024, 11:10
» Destruição de cenário (estilo DD Tank)
por CoronelZeg Sex 09 Ago 2024, 17:16
» RESOLVIDO-Como destruir uma instancia especifica de um objeto
por josuedemoraes Ter 23 Jul 2024, 00:40
» Automatizar a coleta de id
por GabrielXavier Seg 22 Jul 2024, 18:01
» Preciso de ajuda para concluir um pequeno projeto
por lmoura Qui 27 Jun 2024, 15:45
» ANGULO ACOMPANHAR O OBJETO
por Klinton Rodrigues Qui 27 Jun 2024, 08:34
» Musica reinicia quando sala reinicia
por GabrielXavier Ter 18 Jun 2024, 07:28
» como fazer uma copia de gd
por generico_cube Sex 14 Jun 2024, 15:48
» Square Adventure
por guilherme551 Ter 11 Jun 2024, 09:54
» como posso definir limite de uma variavel
por GabrielXavier Sex 07 Jun 2024, 14:14
» [Resolvido] Dúvida, colisão única de objeto
por vdm842 Sex 24 maio 2024, 09:50
[Tutorial] IA Básica de TDS
4 participantes
GMBR :: Ensine & Aprenda :: Tutoriais :: Game Maker
Página 1 de 1
[Tutorial] IA Básica de TDS
TUTORIAL TDS IA (PT. 1)
Olá. Eu sou o Gonçalves e vim aqui ensinar o pouco que eu sei sobre Inteligência Artificial de jogos Top-down shooter. Para isso, quem pretende seguir o tutorial dever baixar uma engine básica de TDS criada por mim. Baixe no link abaixo:
Essa engine tem ativada a opção Treat unintialized variables as 0 (Global Game Settings > Errors), que dá valor 0 às variáveis não-criadas. Tentarei deixar o mais claro possível para os leitores e estarei aceitando feedback.
SÚMARIO
INTRODUÇÃO
Abra o gmk que você baixou e verá uma simples engine de TDS no qual você pode se movimentar, atirar e matar o inimigo (Que nada faz). Dê uma lida nos códigos da engine para que você a entenda, até deixei uns comentários pra facilitar. A imagem "inicial" é essa:
Vamos aos passos agora para criar uma Inteligência Artificial dentro dela.
I. CRIANDO A PERCEPÇÃO DO ATOR
Primeiramente iremos criar uma variável que indique a distância da percepção do NPC. Criando sua var percepcao no seu Create:
Para ter uma ideia da distância que ele irá perceber o jogador, desenhe um círculo (evento Draw) com r (range) que tenha como valor a variável percepcao (Uma linha acima do draw_sprite):
Agora, checar se o NPC viu o jogador, insira no seu Step:
Você pode compreender o que isso faz? Essa linha checa se a distância entre o NPC e o jogador é menor que sua percepção pode alcançar, e se não tem nenhum caixote na frente. Efeito: Define o jogador como seu alvo e que está vendo ele. Para entender seu efeito, insira isso no seu Draw abaixo do código do círculo:
Agora chequei se ele está vendo o alvo, se sim, desenhar uma linha que vai dele ao jogador.
Se você correr pra trás da caixa ele continuará o "percebendo", para mudar isso insira no Step:
Isso checa se tem algum caixote na frente, se sim, não está mais vendo o jogador.
II. SEGUIR E ATIRAR NO AO NOTAR SUA APROXIMAÇÃO
Agora vai no Step:
Bom, após checar se ele está vendo seu alvo, vou ver se a distância entre o NPC e seu alvo é maior que 60% da sua percepção (isso faz com que ele não se aproxime muito). Efeito: Ele vai atrás do alvo (mp_potential_step), olhando para ele (olhar_para), abaixo os códigos de tiro (o mesmo do jogador).
III. PERCEBER JOGADOR CASO SEJA ALVEJADO
Se você atirar no inimigo de longe ele não vai perceber. Para corrigir isso, adicione isso ao script atirar:
Que ficará assim:
E modifique a colisão entre obj_projetil e grupo_pessoas para:
Isso faz com que ele tenha como alvo quem atirou nele.
Já persegue e atira no jogador. Tudo pronto, espero que tenham entendido, qualquer problema só me avisar. O resultado final você pode baixar no link abaixo:
ENGINE PT. 1 (TUTORIAL TDS IA)
Até. Espero que tenha utilidade.
Olá. Eu sou o Gonçalves e vim aqui ensinar o pouco que eu sei sobre Inteligência Artificial de jogos Top-down shooter. Para isso, quem pretende seguir o tutorial dever baixar uma engine básica de TDS criada por mim. Baixe no link abaixo:
ENGINE BASE (TUTORIAL TDS IA)
Essa engine tem ativada a opção Treat unintialized variables as 0 (Global Game Settings > Errors), que dá valor 0 às variáveis não-criadas. Tentarei deixar o mais claro possível para os leitores e estarei aceitando feedback.
SÚMARIO
- 1. Criando a percepção do ator
- 2. Seguir e atirar no jogador ao notar sua aproximação
- 3. Perceber jogador caso seja alvejado (Mesmo que não esteja perceptível)
INTRODUÇÃO
Abra o gmk que você baixou e verá uma simples engine de TDS no qual você pode se movimentar, atirar e matar o inimigo (Que nada faz). Dê uma lida nos códigos da engine para que você a entenda, até deixei uns comentários pra facilitar. A imagem "inicial" é essa:
Vamos aos passos agora para criar uma Inteligência Artificial dentro dela.
I. CRIANDO A PERCEPÇÃO DO ATOR
Primeiramente iremos criar uma variável que indique a distância da percepção do NPC. Criando sua var percepcao no seu Create:
- Código:
percepcao = 220 // Recomendo um valor entre 200 e 350
Para ter uma ideia da distância que ele irá perceber o jogador, desenhe um círculo (evento Draw) com r (range) que tenha como valor a variável percepcao (Uma linha acima do draw_sprite):
- Código:
draw_circle_color(x,y,percepcao,c_yellow,c_yellow,1)
Resultado:
Agora, checar se o NPC viu o jogador, insira no seu Step:
- Código:
if distance_to_object(atr_jogador) < percepcao and ! collision_line(x,y,alvo.x,alvo.y,obj_caixote,0,0) {viu_alvo = true; alvo = atr_jogador}
Você pode compreender o que isso faz? Essa linha checa se a distância entre o NPC e o jogador é menor que sua percepção pode alcançar, e se não tem nenhum caixote na frente. Efeito: Define o jogador como seu alvo e que está vendo ele. Para entender seu efeito, insira isso no seu Draw abaixo do código do círculo:
- Código:
if viu_alvo = true {draw_line_color(x,y,alvo.x,alvo.y,c_red,c_red)}
Agora chequei se ele está vendo o alvo, se sim, desenhar uma linha que vai dele ao jogador.
Resultado:
Se você correr pra trás da caixa ele continuará o "percebendo", para mudar isso insira no Step:
- Código:
if collision_line(x,y,alvo.x,alvo.y,obj_caixote,0,0) {viu_alvo = false}
Isso checa se tem algum caixote na frente, se sim, não está mais vendo o jogador.
II. SEGUIR E ATIRAR NO AO NOTAR SUA APROXIMAÇÃO
Agora vai no Step:
- Código:
if viu_alvo = true
{
if distance_to_object(atr_jogador) > percepcao*0.6 {mp_potential_step(alvo.x,alvo.y,1.2+(velocidade*0.1),1)}
olhar_para(alvo.x,alvo.y)
if tempo < 12 {tempo += 1}
if tempo >= 12 {atirar()}
}
Bom, após checar se ele está vendo seu alvo, vou ver se a distância entre o NPC e seu alvo é maior que 60% da sua percepção (isso faz com que ele não se aproxime muito). Efeito: Ele vai atrás do alvo (mp_potential_step), olhando para ele (olhar_para), abaixo os códigos de tiro (o mesmo do jogador).
Resultado: Ele fica lá, quando avista o jogador, ele o segue e tenta matá-lo.
III. PERCEBER JOGADOR CASO SEJA ALVEJADO
Se você atirar no inimigo de longe ele não vai perceber. Para corrigir isso, adicione isso ao script atirar:
- Código:
bala.atirador = id
Que ficará assim:
- Código:
// Cria a bala
bala = instance_create(x+lengthdir_x(16,direction),y+lengthdir_y(16,direction),obj_projetil)
// Faz com os balas não saiam na mesma direção
desvio = random_range(-12+destreza,12-destreza)
direction += desvio
// Definições
bala.direction = direction
bala.atirador = id
bala.image_angle = direction
bala.speed = 60 // Velocidade da bala
bala.alarm[0] = 30 // Depois de quanto tempo ela se destruirá automaticamente (Ramova se não quiser)
tempo = 0
E modifique a colisão entre obj_projetil e grupo_pessoas para:
- Código:
with(other)
{
energia -= (20+random(15)-resistencia) // Danificar o alvo
alvo = other.atirador //
viu_alvo = true
}
instance_destroy()
Isso faz com que ele tenha como alvo quem atirou nele.
Resultado:
Já persegue e atira no jogador. Tudo pronto, espero que tenham entendido, qualquer problema só me avisar. O resultado final você pode baixar no link abaixo:
ENGINE PT. 1 (TUTORIAL TDS IA)
Até. Espero que tenha utilidade.
Última edição por Gonçalves em Sáb 29 Set 2012, 10:02, editado 3 vez(es)
Gonçalves- Games Ranking :
Notas recebidas : B + A + C
Data de inscrição : 29/10/2010
Reputação : 79
Número de Mensagens : 1013
Prêmios :
x 0 x 4 x 0
x 2 x 0 x 0
x 0 x 0 x 0
Re: [Tutorial] IA Básica de TDS
Muito bom! Estou trabalhando com algo do tipo(IA), e já consegui muita coisa*. Em breve estarei postando o reultado, E
e essa, irei usar com certeza! *(Consegui antes dessa liçao:seguir, fugir, aleatório e pathfind).
No draw gostaria de saber como desenhar um leque que sempre aponte pro lado que a IA esteja olhando ja que a visao comum é +- isso.
e essa, irei usar com certeza! *(Consegui antes dessa liçao:seguir, fugir, aleatório e pathfind).
No draw gostaria de saber como desenhar um leque que sempre aponte pro lado que a IA esteja olhando ja que a visao comum é +- isso.
Re: [Tutorial] IA Básica de TDS
Esse "arco -de-visão" não é difícil de fazer, o problema é ensinar sem ser no CTRL+C, CTRL+V. Eu pedi que me ajudassem sobre como fazer isso na GMC:
http://gmc.yoyogames.com/index.php?showtopic=538247
Funcionou aqui.
Obrigado pelo comentário.
Edit:
Qual é o "critério" para um tutorial ser aprovado? Bom, esse está a um tempo aqui e nada... Falta alguma coisa? Queria saber, porque gostaria de prosseguir nele.
Valeu.
http://gmc.yoyogames.com/index.php?showtopic=538247
Funcionou aqui.
Obrigado pelo comentário.
Edit:
Qual é o "critério" para um tutorial ser aprovado? Bom, esse está a um tempo aqui e nada... Falta alguma coisa? Queria saber, porque gostaria de prosseguir nele.
Valeu.
Gonçalves- Games Ranking :
Notas recebidas : B + A + C
Data de inscrição : 29/10/2010
Reputação : 79
Número de Mensagens : 1013
Prêmios :
x 0 x 4 x 0
x 2 x 0 x 0
x 0 x 0 x 0
Re: [Tutorial] IA Básica de TDS
parabéns cara ótimo tuto..
leandroferro- Data de inscrição : 03/09/2012
Reputação : 0
Número de Mensagens : 14
Prêmios :
x 0 x 0 x 0
x 0 x 0 x 0
x 0 x 0 x 0
Re: [Tutorial] IA Básica de TDS
@leandroferro: Obrigado! Qualquer dúvida pode perguntar.
Parte 2: https://gmbr.forumeiros.com/t24151-tutorial-ia-basica-de-tds-pt-2#179661 (Se é que tu não achou o link daqui lá, rs)
Parte 2: https://gmbr.forumeiros.com/t24151-tutorial-ia-basica-de-tds-pt-2#179661 (Se é que tu não achou o link daqui lá, rs)
Gonçalves- Games Ranking :
Notas recebidas : B + A + C
Data de inscrição : 29/10/2010
Reputação : 79
Número de Mensagens : 1013
Prêmios :
x 0 x 4 x 0
x 2 x 0 x 0
x 0 x 0 x 0
Re: [Tutorial] IA Básica de TDS
Contate umn Avaliador por MP, escreva algo como titulo"Avaliação do meu Tutorial" Mensagem "vocÊ pode avaliar o Meu Tutorial dfgsdfghs"Gonçalves escreveu:Qual é o "critério" para um tutorial ser aprovado? Bom, esse está a um tempo aqui e nada... Falta alguma coisa? Queria saber, porque gostaria de prosseguir nele.
Valeu.
Re: [Tutorial] IA Básica de TDS
@Goncalves:
Para falar a verdade estou com uma pequena dificuldade sim, tentei aplicar o código e estou tendo um erro de variable unknow, por algum motivo ele não reconhece a variavél alvo (viu_alvo).
Você declarou essa variável em algum outro lugar? Eu estou declarando no step do enemy, é isso?
Para falar a verdade estou com uma pequena dificuldade sim, tentei aplicar o código e estou tendo um erro de variable unknow, por algum motivo ele não reconhece a variavél alvo (viu_alvo).
Você declarou essa variável em algum outro lugar? Eu estou declarando no step do enemy, é isso?
- Código:
if distance_to_object(obj_main) < percepcao and ! collision_line(x,y,obj_main.x,obj_main.y,obj_trunk,0,0) {alvo=true};
if collision_line(x,y,obj_main.x,obj_main.y,obj_trunk,0,0) {alvo = false};
if alvo = true
{
if distance_to_object(obj_main) > percepcao*0.6 {mp_potential_step(obj_main.x,obj_main.y,1.2,1)}
olhar_para(obj_main.x,obj_main.y)
}
leandroferro- Data de inscrição : 03/09/2012
Reputação : 0
Número de Mensagens : 14
Prêmios :
x 0 x 0 x 0
x 0 x 0 x 0
x 0 x 0 x 0
Re: [Tutorial] IA Básica de TDS
É pelo simples fato de eu ter ativado a opção Set unintiliazed variables as 0 na aba Errors do menu Global Game Settings, que dá valor 0 à todas as vars que não foram criadas.
Gonçalves- Games Ranking :
Notas recebidas : B + A + C
Data de inscrição : 29/10/2010
Reputação : 79
Número de Mensagens : 1013
Prêmios :
x 0 x 4 x 0
x 2 x 0 x 0
x 0 x 0 x 0
Tópicos semelhantes
» [Tutorial] IA Básica de TDS (Pt. 3)
» [Tutorial] IA Básica de TDS (Pt. 2)
» [Tutorial] 39dll Tutorial - Part I
» [Tutorial]I.A Básica – Movimentação de Inimigo com colisões
» Oi Galerinha, aqui um tutorial básico de um jogo de luta que eu fiz! [TUTORIAL]
» [Tutorial] IA Básica de TDS (Pt. 2)
» [Tutorial] 39dll Tutorial - Part I
» [Tutorial]I.A Básica – Movimentação de Inimigo com colisões
» Oi Galerinha, aqui um tutorial básico de um jogo de luta que eu fiz! [TUTORIAL]
GMBR :: Ensine & Aprenda :: Tutoriais :: Game Maker
Página 1 de 1
Permissões neste sub-fórum
Não podes responder a tópicos