GMBR
Gostaria de reagir a esta mensagem? Crie uma conta em poucos cliques ou inicie sessão para continuar.
Entrar

Esqueci-me da senha

Últimos assuntos
» Preciso de ajuda
por AftonDuGrau Dom 21 Abr 2024, 20:18

» Como faz o evento drawn GUI, não se repetir?
por aminaro Sex 19 Abr 2024, 20:30

» Como ajustar velocidade de cada frame da animação no game maker
por Ralphed Qui 18 Abr 2024, 18:28

» PROBLEMAS COM FÍSICAS DE ÁGUA
por aminaro Ter 16 Abr 2024, 10:07

» Retorno da GMBR!!!
por Ralphed Sex 12 Abr 2024, 22:45

» JOGADOR PARANDO NO AR QUANDO ATACA
por aminaro Qua 10 Abr 2024, 13:51

» Problemas com texto interativo
por Kaaru72 Dom 07 Abr 2024, 11:31

» Erro escondido e indecifrável
por dev_gabize.azv Qui 04 Abr 2024, 10:11

» Mudar cor de apenas uma palavra
por Ralphed Sáb 30 Mar 2024, 00:39

» Procuro Programador de game maker
por Wou Sex 15 Mar 2024, 10:27

» Mod APK
por gamerainha Qua 13 Mar 2024, 06:30

» 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


[UNIVERSO MAKER] IA - Comportamento de Inimigos

3 participantes

Ir para baixo

[UNIVERSO MAKER] IA - Comportamento de Inimigos Empty [UNIVERSO MAKER] IA - Comportamento de Inimigos

Mensagem por Tiago Lima Sáb 28 Jan 2012, 15:06

[UNIVERSO MAKER] IA - Comportamento de Inimigos 14108501

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:

[UNIVERSO MAKER] IA - Comportamento de Inimigos Nsmbwgoomba

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 flw


Última edição por tblima123 em Sáb 28 Jan 2012, 19:57, editado 2 vez(es)
Tiago Lima
Tiago Lima

Games Ranking : Nota C

Notas recebidas : C
Data de inscrição : 14/07/2008
Reputação : 17
Número de Mensagens : 199
Prêmios : [UNIVERSO MAKER] IA - Comportamento de Inimigos Empty

Medalhas x 0 Tutoriais x 1 Moedas x 0

Ouro x 0 Prata x 0 Bronze x 0

Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0

https://www.youtube.com/user/CanalNexteLevel

Ir para o topo Ir para baixo

[UNIVERSO MAKER] IA - Comportamento de Inimigos Empty Re: [UNIVERSO MAKER] IA - Comportamento de Inimigos

Mensagem por Lauro Sáb 28 Jan 2012, 17:58

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.
Lauro
Lauro

Games Ranking : Nota D

Notas recebidas : C+D
Data de inscrição : 09/11/2010
Reputação : 11
Número de Mensagens : 855
Prêmios : [UNIVERSO MAKER] IA - Comportamento de Inimigos Empty

Medalhas x 0 Tutoriais x 0 Moedas x 0

Ouro x 0 Prata x 0 Bronze x 0

Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0

Ir para o topo Ir para baixo

[UNIVERSO MAKER] IA - Comportamento de Inimigos Empty Re: [UNIVERSO MAKER] IA - Comportamento de Inimigos

Mensagem por ruben.23 Dom 29 Mar 2015, 14:11

Deu certo naum cara, o enemy ficou subindo e descendo sem para e naum perseguiu o player naum!KKKKKKKKKKK coisa estranha!
ruben.23
ruben.23

Data de inscrição : 29/05/2013
Reputação : 10
Número de Mensagens : 212
Prêmios : [UNIVERSO MAKER] IA - Comportamento de Inimigos Empty

Medalhas x 0 Tutoriais x 0 Moedas x 0

Ouro x 0 Prata x 0 Bronze x 0

Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0

Ir para o topo Ir para baixo

[UNIVERSO MAKER] IA - Comportamento de Inimigos Empty Re: [UNIVERSO MAKER] IA - Comportamento de Inimigos

Mensagem por Tiago Lima Seg 30 Mar 2015, 12:48

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 flw
Tiago Lima
Tiago Lima

Games Ranking : Nota C

Notas recebidas : C
Data de inscrição : 14/07/2008
Reputação : 17
Número de Mensagens : 199
Prêmios : [UNIVERSO MAKER] IA - Comportamento de Inimigos Empty

Medalhas x 0 Tutoriais x 1 Moedas x 0

Ouro x 0 Prata x 0 Bronze x 0

Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0

https://www.youtube.com/user/CanalNexteLevel

Ir para o topo Ir para baixo

[UNIVERSO MAKER] IA - Comportamento de Inimigos Empty Re: [UNIVERSO MAKER] IA - Comportamento de Inimigos

Mensagem por ruben.23 Seg 30 Mar 2015, 14:14

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
ruben.23

Data de inscrição : 29/05/2013
Reputação : 10
Número de Mensagens : 212
Prêmios : [UNIVERSO MAKER] IA - Comportamento de Inimigos Empty

Medalhas x 0 Tutoriais x 0 Moedas x 0

Ouro x 0 Prata x 0 Bronze x 0

Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0

Ir para o topo Ir para baixo

[UNIVERSO MAKER] IA - Comportamento de Inimigos Empty Re: [UNIVERSO MAKER] IA - Comportamento de Inimigos

Mensagem por Conteúdo patrocinado


Conteúdo patrocinado


Ir para o topo Ir para baixo

Ir para o topo

- Tópicos semelhantes

 
Permissões neste sub-fórum
Não podes responder a tópicos