Entrar
Últimos assuntos
» player não consegue andarpor lovn7 Qui 21 Nov 2024, 13:33
» É possível fazer istó no game maker
por William Lima Qui 21 Nov 2024, 10:56
» Rio Rise - novo launcher do Gta San Andreas SAMP Brasil
por Lua Sáb 16 Nov 2024, 20:22
» (Resolvido) 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
» (RESOLVIDO) 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
[UNIVERSO MAKER] IA - Comportamento de Inimigos
3 participantes
GMBR :: Ensine & Aprenda :: Tutoriais :: Game Maker
Página 1 de 1
[UNIVERSO MAKER] IA - Comportamento de Inimigos
Comportamento de Inimigos
Nível de dificuldade: Intermediário;
Requerimentos: Qualquer versão do GM;
Todo ser animado possui comportamentos. Comportamentos são ações previsíveis inerentes a todos os seres que realizam algum tipo de ato ou movimento. O comportamento de um rio por exemplo é bem simples: um movimento fixo numa dada direção.
Em jogos quase tudo tem um comportamento, geralmente bem simples. Vejamos por exemplo um Goomba Comum da série Mario. Os possíveis comportamentos deles se resumem a:
Depois de resumir no papel os possíveis comportamentos do inimigo no jogo, fica mais fácil programa-lo. Portanto, o primeiro passo para se programar o comportamento de um personagem é conhece-lo bem.
Para este exemplo nós iremos começar com algo bem simples, um inimigo para um jogo maze. O comportamento dele será o seguinte:
Esse mesmo comportamento pode ser transcrito com a seguinte lógica:
Então vamos implementar isso com código:
Primeiro crie um objeto qualquer com uma sprite qualquer;
Agora vamos programar;
Definir uma direção para o movimento (para sima):
//Evento Create
Um movimento constante
//Evento Step
Inverter direção ao colidir
//Evento Step
Veja como é a lógica da coisa, é sempre muito importante você entender bem a lógica de um inimigo antes de programar seu comportamento.
Agora crie um objeto qualquer com uma sprite qualquer e marque como sólido, quando o nosso inimigo colidir com esse objeto ele mudará sua direção.
Agora nós iremos dar um pouco mais de inteligencia a esse inimigo maze, o comportamento dele será o seguinte:
Esse mesmo comportamento pode ser transcrito com a seguinte lógica:
Crie um objeto para ser a parede, o chame de obj_parede e o marque como sólido;
Crie um objeto para ser o player e o chame de obj_player;
Ponha esse código no obj_player, ele é um código bem simples meramente ilustrativo:
//Step
Crie um objeto para ser o inimigo e o chame de obj_inimigo.
Pronto, o cenário já está formado para programarmos nosso inimigo, e vamos começar a fazer isso agora:
Iniciar com movimento vertical
//Create
Inverter direção ao colidir com parede
//Step
Restante do comportamento
//Step
Use sprites 32 x 32 px para esse segundo experimento, monte uma room com locais onde o player possa se esconder do inimigo e faça o teste.
Espero que vocês possam ter entendido. E qualquer duvida ou dica, postem aí!
Tchau
Em jogos quase tudo tem um comportamento, geralmente bem simples. Vejamos por exemplo um Goomba Comum da série Mario. Os possíveis comportamentos deles se resumem a:
Depois de resumir no papel os possíveis comportamentos do inimigo no jogo, fica mais fácil programa-lo. Portanto, o primeiro passo para se programar o comportamento de um personagem é conhece-lo bem.
Programando um Inimigo Simples
Para este exemplo nós iremos começar com algo bem simples, um inimigo para um jogo maze. O comportamento dele será o seguinte:
- Iniciar com um movimento vertical para cima;
- Se colidir com algo, inverter direção.
Esse mesmo comportamento pode ser transcrito com a seguinte lógica:
- Definir uma direção para o movimento (para sima);
- Um movimento constante;
- Colidiu com uma parede? Inverter direção.
Então vamos implementar isso com código:
Primeiro crie um objeto qualquer com uma sprite qualquer;
Agora vamos programar;
Definir uma direção para o movimento (para sima):
//Evento Create
- Código:
direcao = -1; //Define uma direção para o movimento, ela só pode ser igual a 1 e -1.
Um movimento constante
//Evento Step
- Código:
vspeed = 5 * (direcao); //define velocidade vertical como 5 * direcao;
Inverter direção ao colidir
//Evento Step
- Código:
if !place_free(x, y + vspeed){ //checa se há algum objeto sólido no caminho, se sim...
direcao *= (-1); //inverte direção
}
Veja como é a lógica da coisa, é sempre muito importante você entender bem a lógica de um inimigo antes de programar seu comportamento.
Agora crie um objeto qualquer com uma sprite qualquer e marque como sólido, quando o nosso inimigo colidir com esse objeto ele mudará sua direção.
Tornando esse Inimigo um pouco mais complexo
Agora nós iremos dar um pouco mais de inteligencia a esse inimigo maze, o comportamento dele será o seguinte:
- Inicia com movimento vertical;
- Inverter direção ao colidir com parede;
- Checa se a posição vertical ou horizontal dele é igual a do player;
- Checa se não há nem uma parede entre ele e o player;
- Ataca!
Esse mesmo comportamento pode ser transcrito com a seguinte lógica:
- Inicia com movimento vertical;
- Colidiu com uma parede? Então inverter direção;
- Minha posição horizontal ou vertical é igual a do player? Então pergunta...;
- Há uma parede entre mim e o player? Se não...;
- Se mover em direção ao player.
Crie um objeto para ser a parede, o chame de obj_parede e o marque como sólido;
Crie um objeto para ser o player e o chame de obj_player;
Ponha esse código no obj_player, ele é um código bem simples meramente ilustrativo:
//Step
- Código:
if place_snapped(32, 32){
hspeed = 0;
vspeed = 0;
if (keyboard_check(vk_up) and place_free(x, y - 8)) {
vspeed -= 8
}
else if (keyboard_check(vk_down) and place_free(x, y + 8)) {
vspeed += 8
}
else if (keyboard_check(vk_right) and place_free(x + 8, y)) {
hspeed += 8
}
else if (keyboard_check(vk_left) and place_free(x - 8, y)) {
hspeed -= 8
}
}
if collision_rectangle(x, y, x + 32, y + 32,obj_inimigo, 0, 1) {
show_message("Você perdeu");
game_end();
}
Crie um objeto para ser o inimigo e o chame de obj_inimigo.
Pronto, o cenário já está formado para programarmos nosso inimigo, e vamos começar a fazer isso agora:
Iniciar com movimento vertical
//Create
- Código:
vspeed = -8; //inicia com movimento vertical
Inverter direção ao colidir com parede
//Step
- Código:
if !place_free(x + hspeed, y + vspeed) { //se colidir com a parede no sentido do movimento...
hspeed *= -1; //inverter o sinal das velocidades
vspeed *= -1;
}
Restante do comportamento
//Step
- Código:
//Se está na mesma linha ou mesma coluna que o player...
//Se não há uma parede entre o inimigo e o player...
//Mudar movimento para direção do player
if (((x == obj_player.x) or (y == obj_player.y)) and place_snapped(32, 32)){
if !collision_line(x, y, obj_player.x, obj_player.y, obj_parede, 0, 0) {
if (x == obj_player.x) {
hspeed = 0;
vspeed = (sign(obj_player.y - y)*8);
}
else if (y == obj_player.y) {
hspeed = (sign(obj_player.x - x)*8);;
vspeed = 0;
}
}
}
Use sprites 32 x 32 px para esse segundo experimento, monte uma room com locais onde o player possa se esconder do inimigo e faça o teste.
______________________________________________
Viu como é simples programar o comportamento de um inimigo? O segredo está em esmiuçar cada minimo detalhe que faz parte dos movimentos dele. Como você pode notar, tudo não passa de uma grande sequencia de condições que quando atendidas realizam algo.Espero que vocês possam ter entendido. E qualquer duvida ou dica, postem aí!
Tchau
Última edição por tblima123 em Sáb 28 Jan 2012, 19:57, editado 2 vez(es)
Re: [UNIVERSO MAKER] IA - Comportamento de Inimigos
Eai cara, gostei desse tutorial.
Era justamente disso que eu estava querendo saber mais, pra mim IA é a melhor parte do jogo.
Busco criar um jogo com inimigos inteligentes, não como seres enfadonhos que ficam parados esperando ser atacados pelo player.
Aguardo o próximo tutorial, com IA mais avançada.
Era justamente disso que eu estava querendo saber mais, pra mim IA é a melhor parte do jogo.
Busco criar um jogo com inimigos inteligentes, não como seres enfadonhos que ficam parados esperando ser atacados pelo player.
Aguardo o próximo tutorial, com IA mais avançada.
Lauro- Games Ranking :
Notas recebidas : C+D
Data de inscrição : 09/11/2010
Reputação : 11
Número de Mensagens : 855
Prêmios :
x 0 x 0 x 0
x 0 x 0 x 0
x 0 x 0 x 0
Re: [UNIVERSO MAKER] IA - Comportamento de Inimigos
Deu certo naum cara, o enemy ficou subindo e descendo sem para e naum perseguiu o player naum!KKKKKKKKKKK coisa estranha!
ruben.23- Data de inscrição : 29/05/2013
Reputação : 10
Número de Mensagens : 212
Prêmios :
x 0 x 0 x 0
x 0 x 0 x 0
x 0 x 0 x 0
Re: [UNIVERSO MAKER] IA - Comportamento de Inimigos
A ideia desse exemplo não era bem uma perseguição, basicamente o inimigo muda de direção apenas se estiver alinhado horizontalmente ou verticalmente com o player...
O que tá acontecendo aí? Vlw
O que tá acontecendo aí? Vlw
Re: [UNIVERSO MAKER] IA - Comportamento de Inimigos
Olha só, ele fica subindo e descendo mas se está na horizontal e se o player vai e fica parado numa linha na vertical esperando alinhar, quando ocorre o alinhamento na vertical o inimigo naum desce pra perceguir o player na linha vertical!
ruben.23- Data de inscrição : 29/05/2013
Reputação : 10
Número de Mensagens : 212
Prêmios :
x 0 x 0 x 0
x 0 x 0 x 0
x 0 x 0 x 0
Tópicos semelhantes
» [RESOLVIDO]Declarar uma array de inimigos e enche-la com dados dos inimigos
» IA Para Inimigos, Vidas, Especiais e Inimigos executando movimentos.
» Tutorial de comportamento no fórum.
» [Ajuda] Comportamento do jogo
» Mapa do universo
» IA Para Inimigos, Vidas, Especiais e Inimigos executando movimentos.
» Tutorial de comportamento no fórum.
» [Ajuda] Comportamento do jogo
» Mapa do universo
GMBR :: Ensine & Aprenda :: Tutoriais :: Game Maker
Página 1 de 1
Permissões neste sub-fórum
Não podes responder a tópicos