[Isométrico] Parte 1 - Movimentação Básica

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

[Isométrico] Parte 1 - Movimentação Básica

Mensagem por JV Justino em Sex 01 Jul 2011, 14:52

Nome: [Isométrico] Parte 1 - Movimentação Básica
Descrição: Como fazer movimentos, gravidade e pulos em jogos isométricos.
Nível: Intermediário
Requerimentos: GM8 Lite/Pro

Olá!
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 que hspeed, 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<zland)
{
    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.5
if(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;
-Explicando

z=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 step

No evento Step coloque:
Código:
if(obj_player.z>=z) solid=false;
else solid=true;
-Explicando

if(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;
-Explicando

if(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.


E acaba a primeira parte do tutorial. Espero que tenham gostado. Qualquer dúvida é só perguntar!

さようなら!


Parte 2 - Blocos Flutuantes e Plataformas Móveis. Aguardem!


Última edição por JV Justino em Qua 17 Dez 2014, 15:37, editado 8 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 1 - Movimentação Básica

Mensagem por andreh em Sex 01 Jul 2011, 16:24

Nossa! Ótimo tuto, ele deve ser aprovado, parabéns. Por favor, não desista desse tema, eu quero aprender a fazer jogos isométricos, e vc explica 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 1 - Movimentação Básica

Mensagem por JV Justino em Sex 01 Jul 2011, 16:29

andreh escreveu:Nossa! Ótimo tuto, ele deve ser aprovado, parabéns. Por favor, não desista desse tema, eu quero aprender a fazer jogos isométricos, e vc explica bem!
Muito obrigado!
E não se preocupe, agora só tenho apenas idéias para fazer duas partes, mas estarei sempre fazendo mais. Jogos isométricos são muito complicados, principalmente com pulo e gravidade.

Talvez hoje mesmo eu faça a parte 2, que ensinará a usar blocos flutuantes e plataformas móveis. Feliz

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 1 - Movimentação Básica

Mensagem por Lord Minus em Sex 01 Jul 2011, 16:39

Nossa seu tutorial tá ótimo nota 1000/10 sem dúvida um dos melhores tutos que eu ja vi parabéns e se for fazer a segunda parte, me envia uma MP depois de pronto com o link!!! Happy Fight!

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 1 - Movimentação Básica

Mensagem por JV Justino em Sex 01 Jul 2011, 16:46

!GO┴E! escreveu:Nossa seu tutorial tá ótimo nota 1000/10 sem dúvida um dos melhores tutos que eu ja vi parabéns e se for fazer a segunda parte, me envia uma MP depois de pronto com o link!!! Happy Fight!
Pode deixar, assim que eu terminar eu envio a MP. Happy

Muito obrigado!
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 1 - Movimentação Básica

Mensagem por Lord Minus em Sex 01 Jul 2011, 16:51

Dica:no próximo tuto ponha os códigos em código ex.:
Código:
assim
Fica mais rápido pois vc copia e cola depois vc vem e tenta entender o código fica mais simples também Happy

joao vitor jv escreceu:
Muito obrigado!
flw
Resp:Disponha

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 1 - Movimentação Básica

Mensagem por JV Justino em Sex 01 Jul 2011, 16:53

!GO┴E! escreveu:Dica:no próximo tuto ponha os códigos em código ex.:
Código:
assim
Fica mais rápido pois vc copia e cola depois vc vem e tenta entender o código fica mais simples também Happy

joao vitor jv escreceu:
Muito obrigado!
flw
Resp:Disponha
É verdade. Eu não gosto muito da auto-formatação. Prefiro o code mesmo.
Muito obrigado de novo!

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 1 - Movimentação Básica

Mensagem por fonetico em Sex 01 Jul 2011, 16:59

Parabéns! Gostei do tutorial muito bom! Ainda mais porque é sobre um assunto muitas vezes nem lembrado.

- Tutorial aprovado
- Movido para Tutoriais aprovados

fonetico

Número de Mensagens : 1830
Idade : 21
Data de inscrição : 05/10/2009
Reputação : 7
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   :
   :
   :

Voltar ao Topo Ir em baixo

Re: [Isométrico] Parte 1 - Movimentação Básica

Mensagem por Lord Minus em Sex 01 Jul 2011, 17:13

Parabéns você mereceu ainda mais por que o tema é difícil e você explica-o muito bem e com naturalidade você consegue tornar um tema normalmente chato em um tema até agradável, parabéns !!!

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 1 - Movimentação Básica

Mensagem por PedroX em Sex 01 Jul 2011, 17:16

É outro bom tutorial.
Está bem formatado e explicado, dando gosto de ler.

Dica: Se você deixar auto-formatado vai evitar que venham e façam cópia do seu tutorial para o game maker, sem ao menos ler. Isso dificulta mais o trabalho dessas pessoas.

Até mais!

PedroX

Ranking : Nota C
Número de Mensagens : 6034
Idade : 21
Data de inscrição : 26/07/2008
Notas recebidas : C+B
Reputação : 286
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   :
   :
   :

Voltar ao Topo Ir em baixo

Re: [Isométrico] Parte 1 - Movimentação Básica

Mensagem por JV Justino em Sex 01 Jul 2011, 17:22

Pedro Henrique escreveu:É outro bom tutorial.
Está bem formatado e explicado, dando gosto de ler.

Dica: Se você deixar auto-formatado vai evitar que venham e façam cópia do seu tutorial para o game maker, sem ao menos ler. Isso dificulta mais o trabalho dessas pessoas.

Até mais!
Então nesse caso, eu vou usar a auto-formatação mesmo.
Muito obrigado!

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 1 - Movimentação Básica

Mensagem por sonic luan em Sex 01 Jul 2011, 22:35

da esse erro
Código:


___________________________________________
FATAL ERROR in
action number 4
of  Step Event
for object obj_player:

COMPILATION ERROR in code action
Error in code at line 10:
     depth=-y-z/2;</zland)
                ^
at position 16: Unexpected symbol in expression.

sonic luan

Ranking : Nota C
Número de Mensagens : 1003
Idade : 17
Data de inscrição : 28/01/2011
Notas recebidas : C-D-A-C
Reputação : 18
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   : 0
   : 0
   : 1

http://sonicmaker.forumeiros.com/memberlist

Voltar ao Topo Ir em baixo

Re: [Isométrico] Parte 1 - Movimentação Básica

Mensagem por JV Justino em Sex 01 Jul 2011, 22:56

Isso é um problema que ocorreu por causa da auto-formatação.

O correto é depth=-y-z/2;

Depois eu tento corrigir os problemas

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 1 - Movimentação Básica

Mensagem por PedroX em Sab 02 Jul 2011, 12:24

Sonic Luan:

Para resolver esse problema, é simples:

Posicione o mouse na parte de cima e na direita da caixa de códigos, aparecerá três botões, clique no primeiro e pronto, seu código vai estar limpo, copie o código e cole no game maker.

Até mais!

PedroX

Ranking : Nota C
Número de Mensagens : 6034
Idade : 21
Data de inscrição : 26/07/2008
Notas recebidas : C+B
Reputação : 286
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   :
   :
   :

Voltar ao Topo Ir em baixo

Re: [Isométrico] Parte 1 - Movimentação Básica

Mensagem por Licht em Sab 02 Jul 2011, 13:48

Cara eu ia fazer uma engine assim =/ Mas já que você já fez esse tutorial, parabéns... Está muito bem feito.

Licht

Ranking : Sem avaliações
Número de Mensagens : 1217
Idade : 18
Data de inscrição : 26/04/2010
Reputação : 34
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   : 0
   : 1
   : 0

http://lightsoftworks.blogspot.com/

Voltar ao Topo Ir em baixo

Re: [Isométrico] Parte 1 - Movimentação Básica

Mensagem por Super Games em Seg 04 Jul 2011, 18:19

Realmente um tutorial maravilhoso, estou amando os tutoriais, realmente o tutorial está ótimo, executei o tutorial e deu certinho aqui, mas uma dúvida, como enfileirar cada bloco na room?Pois aqui eu só consigo colocar um longe no outro, é algum problema na mascará ou no tamanho do objeto?

Super Games

Ranking : Nota D
Número de Mensagens : 2704
Idade : 18
Data de inscrição : 10/06/2010
Notas recebidas : D
Reputação : 10
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 1 - Movimentação Básica

Mensagem por JV Justino em Seg 04 Jul 2011, 18:23

Super Games escreveu:Realmente um tutorial maravilhoso, estou amando os tutoriais, realmente o tutorial está ótimo, executei o tutorial e deu certinho aqui, mas uma dúvida, como enfileirar cada bloco na room?Pois aqui eu só consigo colocar um longe no outro, é algum problema na mascará ou no tamanho do objeto?
Eu me esqueci de citar isto no tutorial, me desculpe.
A grade da room deve ser de 32x16.

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 1 - Movimentação Básica

Mensagem por Conteúdo patrocinado Hoje à(s) 23:54


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