Primeiro Jogo #1 - Movimentação em Grid e Colisões

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

Primeiro Jogo #1 - Movimentação em Grid e Colisões

Mensagem por dharrison em Ter 09 Set 2014, 12:42

Crie seu Primeiro Jogo Completo #1
- Movimentação em Grid, Animação e Colisões -


Título: Crie seu Primeiro Jogo Completo #1 - Movimentação em Grid, Animação e Colisões.
Versão do GM: Game Maker 8.0 PRO, 8.1 PRO e também GMS:Standard
Dificuldade: Fácil
Requer Extensões: Não.
Requer DLLs: Não.
Tags: Primeiro Jogo, Top Down, Grid, Movimentação, GML, Paredes, Colisões, Importar Sprites.


Introdução

Eai pessoal, belezinha?

Hoje inicio uma série de Aulas para a criação de um game completo Top Down. Durante essas aulas abordaremos diversos assuntos importantes para o desenvolvimento de jogos desse tipo, e tentaremos recriar quase tudo que se conhece nesse gênero de jogo.

Claro que não será possível recriar tudo que existe em todos os games, mas todos os princípios serão trabalhados e certamente ao fim dessas aulas você será capaz de criar games Top Down por conta própria.

Antes de começarmos é importante que você já tenha uma noção básica sobre o Game Maker e GML, que você poderá aprender acessando essas aulas do Alex FC. Além disso, através deste tópico gracioso você poderá baixar e jogar o jogo que criaremos durante as aulas, é legal para se conhecer tudo que iremos criar (no momento da criação dessa primeira aula o jogo estava na versão 1.0, pode ser que quando você ler esse tutorial o jogo possua mais funções).


Começando...

Para começarmos, vamos Importar os Sprites para dentro do nosso novo projeto no Game Maker, baixe este arquivo e siga os passos seguintes:

1. Clique em File>Import Resources


2. Selecione o local onde o arquivo primeirojogo.gmres foi salvo, clique no arquivo e selecione Abrir/Open


3. Pronto! Todos Sprites serão carregados para seu game. Estamos fazendo isso pois nosso foco é a Programação do jogo, e não seu Design, por isso estamos usando as Sprites do próprio Game Maker no projeto. Se você quiser substituir por outras sprites que possuam o mesmo tamanho (32x32) provavelmente não terá problemas, pois não precisarão ser feitos ajustes.
A Imagem é Grande! Clique para Visualizar:

Feito isso estamos prontos para a criação dos demais elementos.


Para criar Objetos, clique na Bola Azul no topo da tela.


Uma Janela surgirá com a propriedades do Objeto. Dê a esse primeiro Objeto o nome de obj_explo, defina o Sprite para explo_baixo, clique na caixa Solid, defina Depth para -2, defina a Mask para o sprite "mask" (Quadrado Preto). O Resultado será o seguinte.

Entendendo as Configurações:
obj_explo - nome do Objeto, usaremos esse nome como referência nos scripts, portanto é importante estar correto.
explo_baixo - sprite do explorador olhando para baixo, serve apenas para que possamos identificá-lo na Room, já que criamos um script que fará a troca de sprites. Esse campo define o sprite inicial.
Solid - define o objeto como solido, mas mesmo que ele não seja sólido as Colisões acontecem, porém algumas funções como place_free funcionam apenas com objetos sólidos.
Depth -2 - Depth é a profundidade ou "camada" na qual o objeto se encontra. Estar na camada -2 o coloca acima de todos objetos que estão em camadas maiores que -2, como -1, 0, 1, 10, 35, etc...
Mask: mask - Define o Sprite "mask" como a Máscara do Objeto. Isso significa que em Colisões e para todos os efeitos, o Explorador é um bloco de 32x32 pixels. Usar máscaras previne problemas com Colisões e permite a Movimentação em Grid.

Dúvidas? Comente

Por enquanto pode dar um OK em nosso obj_explo.
Clique novamente na Bola Azul para Criar um Objeto.

Nesse novo Objeto defina o nome como obj_parede, defina o sprite como spr_parede, clique na caixa Solid, defina a Mask como o Sprite "mask", e de OK. A seguir uma imagem apenas para evitar enganos.


A explicação sobre esses elementos já foi dada acima.


Definindo as Variáveis do obj_explo

Agora vamos definir as variáveis do obj_explo, serão 4 variáveis, sendo que uma delas é Built-in do próprio Game Maker, isso significa que não precisamos nos preocupar em programá-la, basta definir. Acesse novamente nosso obj_explo dando um clique duplo sobre ele, a janela de propriedades se abrirá. Siga os passos:

1. Clique em Add Event > Create Event Create
2. Clique na aba Control e arraste um Piece of Code para o campo Actions


3. O Editor de Script do Game Maker se abrirá (já viu as aulas do Alex FC não é? bravo ). Dentro do Editor digite o código:
Código:
//Variáveis
parado=true //Define se o Explorador está parado ou andando. True=Parado, False=Andando
direcao=0 //Ele se moverá em 4 Direções, cada uma corresponderá a um número.
arma=false //O Jogador inicia a fase desarmado.
image_speed=0 //Define a velocidade da animação, essa é uma Built-in Variable do Game Maker, por isso fica colorida.

Digite exatamente como está acima, lembrando que tudo que vem depois do // é comentário e deverá ficar colorido (geralmente verde). A explicação do uso de cada variável está no próprio código.

IMPORTANTE: Esse código foi definido no Evento CREATE Event Create do Objeto, isso significa que ele Define variáveis que não existam antes, porém toda vez que o Objeto for Criado (Create né...) essas variáveis serão redefinidas, além disso o Create acontece antes mesmo da Room carregar completamente. Se seu game está dando algum bug antes de iniciar uma Room, provavelmente este erro está no Create. Tenha sempre isso em mente quando usar o Create. Exemplo: na próxima fase, mesmo se o jogador tinha pego a Arma, ele começará a fase novamente desarmado, pois arma voltará a ser 0.

4. Após isso, clique no "V" Verde para confirmar seu script.

Dessa forma definimos as Variáveis que nosso obj_explo usará.


Criando a Movimentação em GRID

A Movimentação em Grid é um tipo de movimentação de objetos que se alinha totalmente a "grade" definida. No nosso caso usaremos um grid de 32 x 32 pixels, isso significa que nosso objeto sempre está andando de 32 em 32 pixels, mesmo que soltemos a tecla, ele se moverá até estar alinhado. Este tpo de movimentação facilita a jogabilidade de Maze Games (Jogos de Labirinto, como Pac Man).

Para criar essa movimentação, clique sobre Add Event > Step Event Step e então arraste um Piece of Code para o campo Actions, igual acabamos de fazer com o Create.
O Editor se abrirá novamente, insira nele este cóigo um pouco mais complexo:
Código:
//Variaveis do Sprite e Movimento
switch keyboard_key
{
case not vk_down and not vk_right and not vk_up and not vk_left: if place_snapped(32,32){speed=0}; parado=true; break; //Parar se nenhuma direção estiver pressionada
case vk_right: if place_snapped(32,32){direction=0; speed=4}; direcao=1; parado=false; break;
case vk_up: if place_snapped(32,32){direction=90; speed=4}; direcao=2; parado=false; break;
case vk_left: if place_snapped(32,32){direction=180; speed=4}; direcao=3; parado=false; break;
case vk_down: if place_snapped(32,32){direction=270; speed=4}; direcao=0; parado=false; break;
}

Nesse caso usamos a declaração Switch para definir a movimentação, juntamente com keyboard_key (variável Built-in do Game Maker).
Não sabe usar Switch? Já falei para ver as aulas do Alex FC bravo

O primeiro caso (case) verifica se nenhuma das Setas do Teclado estão pressionadas e pára o objeto alinhando-o com a grid usando place_snapped(32,32). E também define a variável parado como verdadeiro (true).
Os demais casos fazem a movimentação do objeto, alinhando com a grid 32x32, definindo a direction que o objeto seguirá, definindo a speed como 4 e as variáveis direcao e parado de acordo com o necessário.

Não sabe usar direction? Clique Aqui e Aprenda!


Animando o Personagem

Neste game usei um padrão de animação que costumo usar todos meus jogos, sei que não é o melhor modo de fazer, mas é o jeito que me acostumei. Se quiser modificar fique a vontade Happy

Para aplicar esse script, adicione um novo Piece of Code Action Code dentro do Step Event Step do obj_explo e insira o seguinte código:
Código Enooorme:

Código:
if direcao=0 //BAIXO
{
    if parado=true
    {
    if arma!=0{sprite_index=explo_abaixo}else{sprite_index=explo_baixo}
    image_speed=0
    image_index=0
    }
    else
    {
        if keyboard_check(vk_down)
        {
        if arma!=0{sprite_index=explo_abaixo}else{sprite_index=explo_baixo}
        image_speed=0.5
        }
    }
}


if direcao=1 //DIREITA
{
    if parado=true
    {
    if arma!=0{sprite_index=explo_adir}else{sprite_index=explo_dir}
    image_speed=0
    image_index=0
    }
    else
    {
        if keyboard_check(vk_right)
        {
        if arma!=0{sprite_index=explo_adir}else{sprite_index=explo_dir}
        image_speed=0.5
        }
    }
}

if direcao=2 //CIMA
{
    if parado=true
    {
    if arma!=0{sprite_index=explo_acima}else{sprite_index=explo_cima}
    image_speed=0
    image_index=0
    }
    else
    {
        if keyboard_check(vk_up)
        {
        if arma!=0{sprite_index=explo_acima}else{sprite_index=explo_cima}
        image_speed=0.5
        }
    }
}

if direcao=3 //ESQUERDA
{
    if parado=true
    {
    if arma!=0{sprite_index=explo_aesq}else{sprite_index=explo_esq}
    image_speed=0
    image_index=0
    }
    else
    {
        if keyboard_check(vk_left)
        {
        if arma!=0{sprite_index=explo_aesq}else{sprite_index=explo_esq}
        image_speed=0.5
        }
    }
}

Sim, é enorme!! affraid
Já testei essa mesma lógica dentro de um Switch e não funciona.

Bom vamos ao entendimento do código:
- a cada if direcao=n inicia uma declaração "se a variável direcao do objeto for tal..."
- o laço if parado=true{talcoisa}else{outracoisa} diz ao Game Maker que se a variável parado for true, o objeto volta a imagem 0 do sprite  (image_index=0) e pára a animação (image_speed=0), e redefine o sprite do objeto (sprite_index=tal)
- o laço if arma!=0{umasprite}else{outrasprite} faz com que nosso Explorador tenha 2 sprites diferentes: Armado e Desarmado.

Bom pessoal, se esse trecho do código ficar complicado, não se preocupem em decifrá-lo agora, apenas copie e cole pois ele é meio tenso mesmo...


Colisão Simples com a Parede

Depois daquela animação complicada, vamos a algo bem mais simples!
Para criar a colisão com a Parede, que será única colisão verdadeiro do explorador (mais informações na próxima aula Razz ), faça o seguinte:

1. Clique em Add Event > Collision Event Collision  > com o obj_parede
2. Na aba Main, selecione o botão (Drag'n'Drop) Move Fixed Action Move Fixed
3. Configure como a imagem abaixo:


É só isso! Esse é tipo de colisão mais simples, e escolhemos usá-la por um bom motivo: porque funciona!
Não há razão para complicar algo que funciona do modo mais simples  u.u


Criando a Room de Teste

Em seguida, clique duas vezes sobre a Room0 e configure-a da seguinte maneira:


Salve o Projeto como Aula01.gmk e clique no Play Verde para testar. Tudo deve estar funcionando correntamente.


Fim da Aula 01

Pois é pessoal! Com isso finalizamos a Engine da Aula 01, realmente me desculpem por não dar uma boa explicação sobre a Animação do Personagem, mas é que realmente está complicado, em uma aula futura (quando provavelmente vocês estarão mais preparados) entraremos em laços de if complexos.

Obrigado por acompanhar essa aula e comente para dar uma força pro tópico!


E lembre-se:  Dúvidas? Comente!


Ir para a Próxima Aula


Última edição por dharrison em Ter 23 Set 2014, 11:48, editado 5 vez(es)

dharrison

Ranking : Nota B
Número de Mensagens : 1243
Idade : 25
Data de inscrição : 04/02/2009
Notas recebidas : A - B
Reputação : 89
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 1
Prêmios
   : 0
   : 1
   : 0

Voltar ao Topo Ir em baixo

Re: Primeiro Jogo #1 - Movimentação em Grid e Colisões

Mensagem por manobrother em Ter 09 Set 2014, 12:56

Caramba Dharrison tutorial ótimo vai ser muito útil para os iniciantes, e essa coisa do grid não sabia mexer e agora sei.O tutorial ficou muito bom, muito bem explicado, nota 100000!

manobrother

Número de Mensagens : 206
Idade : 17
Data de inscrição : 31/10/2013
Reputação : 10
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   : 0
   : 1
   : 0

Voltar ao Topo Ir em baixo

Re: Primeiro Jogo #1 - Movimentação em Grid e Colisões

Mensagem por dharrison em Ter 09 Set 2014, 12:58

vlw manobrother Laughing
E nem completei o tutorial ainda, tenho que ir para o trabalho agora.

Essa é apenas a parte #1, em breve abordarei outros assuntos, até mesmo a criação de um Highscore Online ;)

abraço!

dharrison

Ranking : Nota B
Número de Mensagens : 1243
Idade : 25
Data de inscrição : 04/02/2009
Notas recebidas : A - B
Reputação : 89
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 1
Prêmios
   : 0
   : 1
   : 0

Voltar ao Topo Ir em baixo

Re: Primeiro Jogo #1 - Movimentação em Grid e Colisões

Mensagem por Mateus O de Andrade em Ter 09 Set 2014, 13:06

dharrison escreveu:Em Construção...
Tive que ir trabalhar, a noite completo o tutorial.

Que falta de comprometimento cara....deixar as coisas incompletas por ISSO!!! lol!

Muito bacana seu tutorial cara, só pelo fato de eu ter aprendido umas coisas novas eu mal posso esperar pelo resto!!

Mateus O de Andrade

Ranking : Nota D
Número de Mensagens : 399
Idade : 31
Data de inscrição : 25/03/2014
Reputação : 37
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   : 0
   : 0
   : 0

Voltar ao Topo Ir em baixo

Re: Primeiro Jogo #1 - Movimentação em Grid e Colisões

Mensagem por dharrison em Ter 09 Set 2014, 23:48

Tutorial Completo - Tópico Atualizado

dharrison

Ranking : Nota B
Número de Mensagens : 1243
Idade : 25
Data de inscrição : 04/02/2009
Notas recebidas : A - B
Reputação : 89
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 1
Prêmios
   : 0
   : 1
   : 0

Voltar ao Topo Ir em baixo

Re: Primeiro Jogo #1 - Movimentação em Grid e Colisões

Mensagem por fredcobain em Qua 10 Set 2014, 17:33

Agora sim.
=)

Movido com louvor para a área de tutoriais aprovados.

Obrigado, Dharrison.

fredcobain

Ranking : Sem avaliações
Número de Mensagens : 691
Idade : 35
Data de inscrição : 14/04/2011
Reputação : 162
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   : 0
   : 0
   : 0

Voltar ao Topo Ir em baixo

Re: Primeiro Jogo #1 - Movimentação em Grid e Colisões

Mensagem por dharrison em Sex 12 Set 2014, 09:56

Atualização:
Compatível com Game Maker Studio Standard

dharrison

Ranking : Nota B
Número de Mensagens : 1243
Idade : 25
Data de inscrição : 04/02/2009
Notas recebidas : A - B
Reputação : 89
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 1
Prêmios
   : 0
   : 1
   : 0

Voltar ao Topo Ir em baixo

Re: Primeiro Jogo #1 - Movimentação em Grid e Colisões

Mensagem por Conteúdo patrocinado Hoje à(s) 04:51


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