Pages

terça-feira, 5 de julho de 2011

TUTORIAL 20


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-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
{
    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:
if(z>=other.z) zland=other.z;
if(zland=other.z)
{
    hspeed=other.hspeed;
    vspeed=other.vspeed;
}
if(z>=other.z-40 && z
{
    zspeed=-2;
    zspeed-=zgravity;
}

-Explicando-if(z>=other.z) zland=other.z;Se ele estiver acima da plataforma a altura mínima será a altura da plataforma.if(zland=other.z){hspeed=other.hspeed;vspeed=other.vspeed;}Se estiver em cima da plataforma ele irá se mover junto com ela.if(z>=other.z-40 && z{zspeed=-2;zspeed-=zgravity;}Se estiver abaixo da plataforma e pular, ele irá colidir e voltar para o chão.

0 comentários:

Postar um comentário