[Isométrico] Parte 3 - Movimentação de NPCs

Ver o tópico anterior Ver o tópico seguinte Ir em baixo

[Isométrico] Parte 3 - Movimentação de NPCs

Mensagem por JV Justino em Dom 03 Jul 2011, 20:39

Nome: [Isométrico] Parte 3 - Movimentação de NPCs
Descrição: Como fazer NPCs terem inteligência artificial
Nível: Intermediário
Requerimentos: :gm8:Lite/Pro

Olá!
Aqui estamos na terceira parte dos tutoriais sobre jogos Isométricos. Nesse tutorial serão ensinados movimentos de NPCs.

Vamos Começar!

Se ainda não viu os outros tutoriais, seguem os links:
Parte 1 - Movimentação Básica
Parte 2 - Blocos Flutuantes e Plataformas Móveis


1- Movimentação Básica


Primeiramente, vamos fazer o NPC se mover para as diagonais, em direções randômicas.

Crie um sprite e chame-a de spr_npc. Carregue esta imagem:
Crie mais uma sprite e chame-a de mask_npc. Carregue esta imagem:

Crie um objeto chamado obj_npc. Coloque nele a sprite spr_npc e a mask mask_npc.

No evento Create coloque:
Código:
z=0;
hspeed=choose(2,-2);
vspeed=choose(1,-1);
-Explicando-

z=0;
Define a altura do NPC. Pode ser alterada para fazer NPCs de diferentes alturas.
hspeed=choose(2,-2);
vspeed=choose(1,-1);

Define as velocidades horizontal e vertical, usando valores aleatórios, alterando a direção dos do NPC.

No evento Step coloque:
Código:
if(place_snapped(32,16))
{
    hspeed=choose(hspeed,hspeed,2,-2);
    vspeed=choose(vspeed,vspeed,1,-1);
}
depth=-y-z;
-Explicando-

if(place_snapped(32,16) && z=zland)
{
   hspeed=choose(hspeed,hspeed,2,-2);
   vspeed=choose(vspeed,vspeed,1,-1);
}

Se estiver alinhado a grade (32x16) e estiver no chão, ele poderá escolher outra direção, ou continuar na mesma. Repare que as variáveis hspeed e vspeed aparecem duas vezes nos respectivos códigos. Isso faz com que o objeto não mude de direção a toda hora, continuando no trajeto em que está.
depth=-y-z;
Define a profundidade do objeto, relacionando a posição y e sua altura.

Adicione um evento de colisão com o obj_player e coloque:
Código:
if(z=other.z)
{
    hspeed=-hspeed;
    vspeed=-vspeed;
}
-Explicando-

Se o NPC colidir com o player e eles estiverem na mesma altura, o NPC, ele irá inverter a direção.

Agora no evento de colisão com o obj_block coloque:
Código:
if(z<other.z && z>=other.z-16)
{
    hspeed=-hspeed;
    vspeed=-vspeed;
}
-Explicando-

Se ele colidir com o bloco, ele inverterá a direção. Se passar por cima ou por baixo do bloco, ele continuará andando.

E por último, no evento Draw coloque:
Código:
draw_sprite(sprite_index,image_index,x,y-z);
-Explicando-

Ele desenhará o NPC nos pontos x e y, diminuindo o ponto y pela altura.



E o NPC já está pronto. Ele possui movimentos aleatórios nas diagonais e colisão com os objetos.


2- Pulo e Gravidade


Se o player pode pular e ter gravidade, qual o problema se um NPC também poder?
Agora iremos configurar o pulo e a gravidade do NPC:

No evento Create adicione o seguinte código:
Código:
zspeed=0;
zgravity=0;
zland=0;
-Explicado-

zspeed=0;
Define a velocidade do pulo do NPC.
zgravity=0;
Define a gravidade do NPC.
zland=0;
Define a altura mínima do NPC.

No evento Step adicione o seguinte código:
Código:
z+=zspeed;
zspeed-=zgravity;
if(z>zland) zgravity=0.5;
if(z<zland)
{
    z=zland;
    zgravity=0;
}
if(!place_meeting(x,y,obj_block)) zland=0;
Os códigos são iguais o do player, e foram explicados no primeiro tutorial.



Agora que foi tudo configurado, vamos declarar quando ocorrerá o pulo. Neste exemplo, ele será feito a cada 5 segundos, contados por um alarme.

No evento Create adicione o código:
Código:
alarm[0]=150;
-Explicando-

Dispara o alarme 0 em 150 Steps(5 segundos).

No evento Alarm 0 coloque:
Código:
zspeed=7;
alarm[0]=150;
-Explicando-

zspeed=7;
O NPC pulará com a velocidade 7.
alarm[0]=150;
Dispara o alarme 0 novamente em 150 Steps.



Agora está tudo pronto. Mas... quando o NPC pula por cima do obj_block, ele trava. Por que isso acontece?
Porque o bloco foi configurado para ficar sólido quando o player não estivesse em cima dele. Temos que reconfigurar isso, configurando-o a fazer o mesmo se o NPC estiver sobre ele.

No evento Step do obj_block haverá um código assim:
Código:
if(obj_player.z>=z) solid=false;
Substitua por:
Código:
if(obj_player.z>=z || obj_npc.z>=z) solid=false;
Assim ele não ficará mais sólido, evitando que o NPC trave sobre ele.


3- NPCs em Plataformas Móveis


A única coisa que resta ao NPC fazer é andar nas plataformas móveis.

Adicione um evento de colisão com o obj_platform e coloque:
Código:
iif(z>=other.z) zland=other.z;
if(z==other.z)
{
    hspeed=other.hspeed;
    vspeed=other.vspeed;
}
-Explicando-

Se estiver sobre a plataforma, ele irá se mover conforme a hspeed e a vspeed da plataforma.



E este tutorial acaba aqui. Espero que tenham gostado da terceira parte. Ainda não sei quando vou fazer a quarta parte, e qual será o tema. Mas posso garantir que ela será feita!


さようなら!


Última edição por JV Justino em Dom 21 Jul 2013, 16:14, editado 5 vez(es)

JV Justino

Ranking : Nota A
Número de Mensagens : 619
Idade : 19
Data de inscrição : 07/12/2010
Notas recebidas : A+A
Reputação : 20
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   : 0
   : 0
   : 0

Voltar ao Topo Ir em baixo

Re: [Isométrico] Parte 3 - Movimentação de NPCs

Mensagem por Lord Minus em Dom 03 Jul 2011, 20:51

@_@ tuto muito bem feito e muito bem explicado
@essa aula
não vou poder fazer o exemplo pois to sem tempo
(idéia*crie uma engine pra cada tutorial e poste ao final ou inicio deles Happy)
@ultima aula
fiz o exemplo e deu tudo certin Happy

Lord Minus

Ranking : Nota D
Número de Mensagens : 269
Idade : 19
Data de inscrição : 23/09/2010
Notas recebidas : E-E-C-D-C
Reputação : 4
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   : 0
   : 0
   : 0

http://facebook.com/lordminus

Voltar ao Topo Ir em baixo

Re: [Isométrico] Parte 3 - Movimentação de NPCs

Mensagem por JV Justino em Dom 03 Jul 2011, 20:57

Muito obrigado!

Como já disse no outro tópico, não vou fazer engines, porque se eu postar a engine ninguém vai sequer olhar o tutorial.

Talvez eu faça um exemplo e jogo com tudo o que foi ensinado nos tutoriais. Talvez

JV Justino

Ranking : Nota A
Número de Mensagens : 619
Idade : 19
Data de inscrição : 07/12/2010
Notas recebidas : A+A
Reputação : 20
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   : 0
   : 0
   : 0

Voltar ao Topo Ir em baixo

Re: [Isométrico] Parte 3 - Movimentação de NPCs

Mensagem por .:Allison:. em Dom 03 Jul 2011, 21:23

Estou sem palavras, você ta se destacando demais no fórum, seus tutoriais são perfeitos *-* , você poderia abrir um tópico ou qualquer coisa, sei lá para o público escolher algum tutorial. Muito bom, parabéns.

.:Allison:.

Ranking : Nota B
Número de Mensagens : 630
Idade : 19
Data de inscrição : 25/07/2010
Notas recebidas : B
Reputação : 4
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0

http://clubmaker.forumeiros.com

Voltar ao Topo Ir em baixo

Re: [Isométrico] Parte 3 - Movimentação de NPCs

Mensagem por JV Justino em Seg 04 Jul 2011, 14:20

.:Allison:. escreveu:Estou sem palavras, você ta se destacando demais no fórum, seus tutoriais são perfeitos *-* , você poderia abrir um tópico ou qualquer coisa, sei lá para o público escolher algum tutorial. Muito bom, parabéns.
Muito obrigado Allison!

Talvez quando eu tiver mais tutoriais eu crio um tópico com todos os meus tutoriais. Por enquanto, quem quiser ver meus tutoriais, os links estão na minha assinatura.

flw

JV Justino

Ranking : Nota A
Número de Mensagens : 619
Idade : 19
Data de inscrição : 07/12/2010
Notas recebidas : A+A
Reputação : 20
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   : 0
   : 0
   : 0

Voltar ao Topo Ir em baixo

Re: [Isométrico] Parte 3 - Movimentação de NPCs

Mensagem por andreh em Seg 04 Jul 2011, 15:25

Mais um ótimo tutorial! Vc está suprindo a necessidade de tutoriais sobre jogos isométricos. Estou gostando d+. espero fazer um jogo com esses tutoriais. Continue fazendo sobre esse tema, pois ele é um tanto complexo e um bom tutorial sempre vai bem!

andreh

Ranking : Nota C
Número de Mensagens : 183
Idade : 20
Data de inscrição : 09/03/2011
Notas recebidas : C
Reputação : 3
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0

Voltar ao Topo Ir em baixo

Re: [Isométrico] Parte 3 - Movimentação de NPCs

Mensagem por JV Justino em Seg 04 Jul 2011, 15:31

andreh escreveu:Mais um ótimo tutorial! Vc está suprindo a necessidade de tutoriais sobre jogos isométricos. Estou gostando d+. espero fazer um jogo com esses tutoriais. Continue fazendo sobre esse tema, pois ele é um tanto complexo e um bom tutorial sempre vai bem!
Aqui no fórum existem pouquíssimos tutoriais sobre jogos isométricos, e a maioria é muito simples e repetitiva. Jogos isométricos parecem ser complexos, mas não são, pelo menos não muito. Se você entender todos os códigos será muito fácil, e você poderá acrescentar mais coisas aos jogos baseando-se no que você aprendeu.

Espero que os tutoriais ajudem você no futuro, e ajudem muito mais gente!

flw

JV Justino

Ranking : Nota A
Número de Mensagens : 619
Idade : 19
Data de inscrição : 07/12/2010
Notas recebidas : A+A
Reputação : 20
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   : 0
   : 0
   : 0

Voltar ao Topo Ir em baixo

Re: [Isométrico] Parte 3 - Movimentação de NPCs

Mensagem por S.L em Seg 04 Jul 2011, 15:32

muito bom adoro seus tutorias de isométrico ;)
pretendo no futuro fazer um jogo isometrico e darei créditos a você Razz mais quando é que vai postar a engine?faltam muitas partes par completar o tutorial?

S.L

Número de Mensagens : 8
Data de inscrição : 04/07/2011
Reputação : 0
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0

Voltar ao Topo Ir em baixo

Re: [Isométrico] Parte 3 - Movimentação de NPCs

Mensagem por andreh em Seg 04 Jul 2011, 15:34

Pois é, vc foi o primeiro q fez um tutorial "simples" (eu já vi um tutorial mto dificil) e explicou mto bem, por isso estou gostando!

andreh

Ranking : Nota C
Número de Mensagens : 183
Idade : 20
Data de inscrição : 09/03/2011
Notas recebidas : C
Reputação : 3
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0

Voltar ao Topo Ir em baixo

Re: [Isométrico] Parte 3 - Movimentação de NPCs

Mensagem por JV Justino em Seg 04 Jul 2011, 15:39

S.L escreveu:muito bom adoro seus tutorias de isométrico ;)
pretendo no futuro fazer um jogo isometrico e darei créditos a você Razz mais quando é que vai postar a engine?faltam muitas partes par completar o tutorial?
Ainda não defini quantas partes ele terá. Sempre que vier algo na mente, eu logo farei um tutorial.

Sobre a engine: no último tutorial, eu abrirei uma enquete para saber quem concorda em ser feita uma engine, e quem discorda. Isso porque, se eu postar a engine, ninguém irá ler os tutoriais. Dependendo do resultado da enquete, eu faço uma engine com todos os elementos que foram ensinados.

Muito obrigado!

JV Justino

Ranking : Nota A
Número de Mensagens : 619
Idade : 19
Data de inscrição : 07/12/2010
Notas recebidas : A+A
Reputação : 20
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   : 0
   : 0
   : 0

Voltar ao Topo Ir em baixo

Re: [Isométrico] Parte 3 - Movimentação de NPCs

Mensagem por Ives10 em Qua 08 Fev 2012, 14:04

Sim.Já vi o 1º e o 2º.
Se esse for o problema , como faço para consertar.
Sou iniciante não sei muita coisa.


Última edição por Ives10 em Qua 08 Fev 2012, 14:41, editado 1 vez(es)

Ives10

Número de Mensagens : 13
Data de inscrição : 08/02/2012
Reputação : 1
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   : 0
   : 0
   : 0

Voltar ao Topo Ir em baixo

Re: [Isométrico] Parte 3 - Movimentação de NPCs

Mensagem por JV Justino em Qua 08 Fev 2012, 14:34

Hum...

Você seguiu tudo direitinho, desde o primeiro tutorial?
Parece que o objeto não está reconhecendo a variável z do player.

Ambos estão na room?

flw

JV Justino

Ranking : Nota A
Número de Mensagens : 619
Idade : 19
Data de inscrição : 07/12/2010
Notas recebidas : A+A
Reputação : 20
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   : 0
   : 0
   : 0

Voltar ao Topo Ir em baixo

Re: [Isométrico] Parte 3 - Movimentação de NPCs

Mensagem por Ives10 em Qua 08 Fev 2012, 14:54

Sim.Já vi o 1º e o 2º cheers .
Se esse for o problema , como faço para consertar.
Sou iniciante não sei muita coisa. confused

Ives10

Número de Mensagens : 13
Data de inscrição : 08/02/2012
Reputação : 1
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   : 0
   : 0
   : 0

Voltar ao Topo Ir em baixo

Re: [Isométrico] Parte 3 - Movimentação de NPCs

Mensagem por JV Justino em Qua 08 Fev 2012, 21:15

Ives10 escreveu:Sim.Já vi o 1º e o 2º cheers .
Se esse for o problema , como faço para consertar.
Sou iniciante não sei muita coisa. confused
Em qual objeto está ocorrendo o erro? E quando ele ocorre?

flw

JV Justino

Ranking : Nota A
Número de Mensagens : 619
Idade : 19
Data de inscrição : 07/12/2010
Notas recebidas : A+A
Reputação : 20
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   : 0
   : 0
   : 0

Voltar ao Topo Ir em baixo

Re: [Isométrico] Parte 3 - Movimentação de NPCs

Mensagem por Ives10 em Qua 08 Fev 2012, 22:00

Oi.Valeu pela ajuda.
Já consegui consertar.
Era o que vc tinha dito antes.
A NPC não estava na room.
Vlw cheers

Ives10

Número de Mensagens : 13
Data de inscrição : 08/02/2012
Reputação : 1
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   : 0
   : 0
   : 0

Voltar ao Topo Ir em baixo

Re: [Isométrico] Parte 3 - Movimentação de NPCs

Mensagem por Conteúdo patrocinado Hoje à(s) 05:57


Conteúdo patrocinado


Voltar ao Topo Ir em baixo

Ver o tópico anterior Ver o tópico seguinte Voltar ao Topo

- Tópicos similares

 
Permissão deste fórum:
Você não pode responder aos tópicos neste fórum