Entrar
Últimos assuntos
» Retorno da GMBR!!!por theguitarmester Ter 19 Mar 2024, 22:38
» Procuro Programador de game maker
por Wou Sex 15 Mar 2024, 10:27
» Mod APK
por gamerainha Qua 13 Mar 2024, 06:30
» Mudar cor de apenas uma palavra
por lunalol Sex 01 Mar 2024, 13:42
» 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
» a funçao approach ainda existe?
por PEDRINDEV Ter 26 Dez 2023, 20:05
» Inimigo ataca até por trás! >:(
por saim Sex 22 Dez 2023, 08:55
» [RESOLVIDO]Spawn após morte
por Deception_1999 Dom 17 Dez 2023, 16:39
» Remunerado $$$ - Procuro programador para ajudar a "montar" um jogo
por theguitarmester Sáb 02 Dez 2023, 16:28
» Game maker nao abre
por Cerf Dom 26 Nov 2023, 12:01
[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
|
|