TUTORIAL 19
Autor: Loading... | Publicado: 2011-07-05T14:34:00-07:00


1- Blocos Flutuantes

Crie um objeto chamado&nbsp;obj_float. Coloque nele a sprite&nbsp;spr_block&nbsp;e a mask&nbsp;mask_block, e como&nbsp;Parent&nbsp;coloque o objeto&nbsp;obj_block.No evento&nbsp;Create&nbsp;coloque:
CÓDIGO:

z=32;depth=-y-z/3;
-Explicando-z=32;Define a altura do bloco.depth=-y-z/3Define a profundidade, relacionando a posição&nbsp;y&nbsp;com a altura.Agora no evento&nbsp;Step, coloque:
CÓDIGO:

if(obj_player.z&gt;=z || obj_player.z
else solid=true
-ExplicandoSe o player estiver acima do bloco ou abaixo dele, ele não será sólido, permitindo o player caminhar sobre ou abaixo dele. Se o player estiver ao lado do bloco, ele será sólido.E no evento&nbsp;Draw&nbsp;coloque:
CÓDIGO:
draw_sprite(sprite_index,image_index,x,y-z+16)
-Explicando-Desenha a sprite do objeto, diminuindo a posição&nbsp;y&nbsp;pela altura, e adicionando 16, que é o tamanho total do objeto.Bom, agora que o bloco flutuante está feito, vamos configurar o player para atravessá-lo quando estiver em baixo:No evento de colisão com o&nbsp;obj_block&nbsp;coloque:
CÓDIGO:

if(z&gt;=other.z-40 &amp;&amp; z
{&nbsp; &nbsp; zspeed=-2;&nbsp; &nbsp; zspeed-=zgravity;}
-Explicando-Se o player estiver abaixo do bloco, e colidir com ele enquanto pula, ele irá voltar ao chão.E está pronto o bloco flutuante. Para fazer outros blocos flutuantes com alturas diferentes, é só seguir os procedimentos do tutorial, somente alterando a altura. Lembrando que ela deve ser divisível a 16.
2- Plataformas Móveis


Crie uma sprite e chame-a de&nbsp;spr_platform. Carregue a imagem:&nbsp;Crie um objeto e chame-o de&nbsp;obj_platform. Coloque nele a sprite&nbsp;spr_platform&nbsp;e a mask&nbsp;mask_block.No evento&nbsp;Create&nbsp;coloque:
CÓDIGO:

z=48;hspeed=2;vspeed=-1;
-Explicando-z=32;Define a altura da plataforma.hspeed=2Define a velocidade horizontal.vspeed=-1Define a velocidade vertical.No evento&nbsp;Step&nbsp;coloque:
CÓDIGO:

if(obj_player.z&gt;=z || obj_player.z
else solid=truedepth=-y-z/3;
-Explicando-Define se a plataforma será sólida ou não, conforme a altura do player, e calcula a profundidade.Adicione um evento de colisão com o&nbsp;obj_block, e nele coloque:
CÓDIGO:

hspeed=-hspeed;vspeed=-vspeed;
-ExplicandoInverte as velocidades horizontal e vertical, fazendo a plataforma andar na direção oposta.E no evento&nbsp;Draw&nbsp;coloque:
CÓDIGO:
draw_sprite(sprite_index,image_index,x,y-z+16)
-ExplicandoDesenha a sprite conforme as posições&nbsp;x&nbsp;e&nbsp;y&nbsp;e a altura.&nbsp;
Agora que a plataforma foi feita, vamos configurar o player:Adicione o evento de colisão com o&nbsp;obj_platform, e nele coloque:
CÓDIGO:

if(z&gt;=other.z)&nbsp;{&nbsp; &nbsp; zland=other.z;&nbsp; &nbsp; hspeed=other.hspeed;&nbsp; &nbsp; vspeed=other.vspeed;}
if(z&gt;=other.z-40 &amp;&amp; z
{&nbsp; &nbsp; zspeed=-4;&nbsp; &nbsp; zspeed-=zgravity;}
-Explicando-if(z&gt;=other.z)&nbsp;{zland=other.z;hspeed=other.hspeed;vspeed=other.vspeed;}Se estiver sobre a plataforma, ele irá se mover conforme a&nbsp;hspeed&nbsp;e a&nbsp;vspeed&nbsp;da plataforma.if(z&gt;=other.z-40 &amp;&amp; z{</other.z)
zspeed=-4;</other.z)
zspeed-=zgravity;</other.z)
}</other.z)
Se estiver abaixo dela e colidir durante o pulo, ele voltará ao chão.
Pronto! A plataforma está feita e o player está configurado! Mas... ele não se mexe!É por que ele foi programado para não se mover se nenhuma tecla for pressionada. Para isso não acontecer, temos que mudar um código.No evento&nbsp;Step&nbsp;do&nbsp;obj_player, haverá um código como esse:
CÓDIGO:

else{&nbsp; &nbsp; vspeed=0;&nbsp; &nbsp; hspeed=0;}

Substitua por este:
CÓDIGO:

else if(!place_meeting(x,y,obj_move)){&nbsp; &nbsp; vspeed=0;&nbsp; &nbsp; hspeed=0;}

Assim, ele não ficará parado se estiver sobre a plataforma.
E assim fica pronta a plataforma. Você pode criar plataformas seguindo os mesmos procedimentos, alterando a altura e a direção.
3- Bônus


Quando você coloca os blocos flutuantes e móveis na room, eles dão a impressão de estarem no chão. Para evitar que isso aconteça, você pode usar uma&nbsp;sombra. Crie uma sprites e chame-a de&nbsp;spr_shadow, e carregue esta imagem:&nbsp;Para desenhá-la, vá ao evento&nbsp;Draw&nbsp;do bloco, e coloque o código:
CÓDIGO:
draw_sprite(spr_shadow,0,x,y);

Ele desenhará a sombra abaixo do bloco, nas suas posições&nbsp;x&nbsp;e&nbsp;y, desconsiderando a altura do bloco.