Pages

terça-feira, 5 de julho de 2011

TUTORIAL 17

Descrição: Como fazer movimentos, gravidade e pulos em jogos isométricos.
Nível: IntermediárioRequerimentos: GM8 Lite/ProOlá!Estarei fazendo alguns tutoriais sobre jogos isométricos. Como serão muito compridos, irei dividi-los em partes. Na primeira parte, será ensinado como fazer movimentos em jogos isométricos, pulos e gravidade, e colisão com blocos.Vamos Começar!
1- Uma breve explicação



Muitos têm dificuldade ao fazer pulos em jogos isométricos. Se x representa o comprimento e y a largura, o que representa a altura? Assim como no 3D, o ponto z representa a altura.Os pulos e a gravidade serão coordenados pelo ponto z, enquanto x e y coordenam os movimentos do player.
2- Movimentação do Player



Os tutoriais explicarão somente como movimentar um objeto, então não há necessidade de usar muitas sprites.Crie uma sprite e chame-a de spr_player. E nela carregue esta imagem: Crie outra sprite e chame-a de mask_player. Carregue esta imagem: . Depois, altere sua Origin para X=0 e Y=-16.Crie um objeto chamado obj_player. Coloque nele a sprite spr_player e a mask mask_player.No evento Create coloque:
CÓDIGO:
z=0;
zland=0;
zspeed=0;
zgravity=0;

-Explicando-z=0;Esta variável definirá a altura do player.zland=0;Esta variável definirá a altura mínima, evitando que o player atravesse o "chão".zspeed=0;Esta variável definirá a altura do pulo.zgravity=0;Define a gravidade do player.Agora no evento Step coloque:
CÓDIGO:
if(keyboard_check(vk_up) && keyboard_check(vk_left))
{
    vspeed=-2;
    hspeed=-4;
}
else if(keyboard_check(vk_up) && keyboard_check(vk_right))
{
    vspeed=-2;
    hspeed=4;
}
else if(keyboard_check(vk_down) && keyboard_check(vk_left))
{
    vspeed=2;
    hspeed=-4;
}
else if(keyboard_check(vk_down) && keyboard_check(vk_right))
{
    vspeed=2;
    hspeed=4;
}
else if(keyboard_check(vk_up))
{
    vspeed=-2;
    hspeed=0;
}
else if(keyboard_check(vk_down))
{
    vspeed=2;
    hspeed=0;
}
else if(keyboard_check(vk_left))
{
    hspeed=-4;
    vspeed=0;
}
else if(keyboard_check(vk_right))
{
    hspeed=4;
    vspeed=0;
}
else
{
    vspeed=0;
    hspeed=0;
}

-Explicando-Este código é muito grande para explicar um por um os itens. Eles só farão o player andar. Repare que vspeed é menor do quehspeed, pois se não fosse, daria impressão de que o player está correndo para cima e para baixo, e não andando Ainda no evento Step coloque:
CÓDIGO:
if(keyboard_check_pressed(vk_space) && z=zland) zspeed=7;
z+=zspeed;
zspeed-=zgravity;
if(z>zland) zgravity=0.5;
if(z
{
    z=zland;
    zgravity=0;
}
depth=-y-z/2;

-Explicando-if(keyboard_check_pressed(vk_space) && z=zland) zspeed=7;Se for pressionada a tecla Space e o player estiver no chão, ele pulará.z+=zspeed;A altura irá aumentando conforme a velocidade do pulo.zspeed-=zgravity;A velocidade irá diminuir aos poucos, conforme a gravidade.if(z>zland) zgravity=0.5;Se o objeto não estiver no chão, a gravidade será de 0.5if(z{z=zland;zgravity=0;}Se a altura for menor que a altura mínima, ele ficará na altura mínima e a gravidade será 0.depth=-y-z/2;Calcula a profundidade do objeto, conforme a posição y e a altura.Agora vem o truque de tudo. No evento Draw coloque:
CÓDIGO:
draw_sprite(sprite_index,image_index,x,y-z);

-Explicando-Ele desenha o player nos pontos x e y, diminuindo a altura do ponto y.Agora estão prontos os movimentos do player! Feliz
2- Colisão com Blocos



Agora faremos obstáculos, que são blocos onde o player só pode atravessar se passar por cima deles. Como fazer isso? Lembram-se do que eu disse no começo?
zland=0;
Esta variável definirá a altura mínima, evitando que o player atravesse o "chão".

Nesse caso, é só fazer a altura mínima ser a altura do bloco.Crie uma nova sprite e chame-a de spr_block. Carregue a imgem: Crie outra sprite e chame-a de mask_block e carregue a imagem: Crie um objeto chamado obj_block. Coloque nele a sprite spr_block e a mask mask_block.No evento create coloque:
CÓDIGO:
z=16;
depth=-y-z/3;

-Explicandoz=16;Esta variável define altura do bloco.depth=-y-z/3;Define a profundidade do objeto, relacionando a posição y com a altura. Como o objeto é imóvel, não há necessidade de recalcular a profundidade a cada stepNo evento Step coloque:
CÓDIGO:
if(obj_player.z>=z) solid=false;
else solid=true;

-Explicandoif(obj_player.z>=z) solid=false;Se o player estiver sobre o bloco, ele não será solido, permitindo que o player caminhe sobre ele.else solid=true;Se o player estiver abaixo da altura do bloco, ele será sólido, fazendo com que o player não possa atravessá-lo.Agora que o objeto já foi configurado, vamos voltar para o player. Adicione um evento de colisão com o obj_block e coloque:
CÓDIGO:
if(z>=other.z) zland=other.z;

-Explicandoif(z>=other.z) zland=other.z;Se o player estiver acima bloco, a altura mínima será a altura do bloco, fazendo com que o player pare sobre ele.Durante a colisão com o objeto, o player terá dificuldade para se locomover. Se quiser, poderá adicionar o seguinte código para que o player passe escorregando pelo bloco.
CÓDIGO:
if(keyboard_check(vk_left) && z=zland)
{
    if(place_free(x-4,y+2))
    {
        hspeed=-4;
        vspeed=2;
    }
    if(place_free(x-4,y-2))
    {
        hspeed=-4;
        vspeed=-2;
    }
}
if(keyboard_check(vk_up) && z=zland)
{
    if(place_free(x-4,y-2))
    {
        hspeed=-4;
        vspeed=-2;
    }
    if(place_free(x+4,y-2))
    {
        hspeed=4;
        vspeed=-2;
    }
}
if(keyboard_check(vk_right) && z=zland)
{
    if(place_free(x+4,y+2))
    {
        hspeed=4;
        vspeed=2;
    }
    if(place_free(x+4,y-2))
    {
        hspeed=4;
        vspeed=-2;
    }
}
if(keyboard_check(vk_down) && z=zland)
{
    if place_free(x-4,y+2)
    {
        hspeed=-4;
        vspeed=2;
    }
    if(place_free(x+4,y+2))
    {
        hspeed=4;
        vspeed=2;
    }
}


No evento Step, adicione o código:
CÓDIGO:
if !place_meeting(x,y,obj_block) zland=0;

-Explicando-Se o bloco não estiver embaixo do player, a altura mínima será 0, que é a altura do "chão".Você pode fazer blocos de diferentes tamanhos. Para isso, adicione um novo objeto, e coloque como parent o obj_block e mudar a altura (a altura deve ser divisível a 16).Para posicionar os objeto na room, ela deve ter a grade em 32x16.

1 comentários:

Unknown disse...

queria saber como ponho meu jogo criado no game maker em meu blog no blogger.com

Postar um comentário