
Olá pessoal! Tudo bem com vocês?
Hoje vou mostrar como criar um Jogo de Nave no GameMaker Studio.
Antes de mais nada, quero deixar claro que esse Tutorial é para aqueles que já possuem os conhecimentos básicos do GameMaker, como criar Sprites, Objects, Rooms, etc. Se você ainda não possui tais conhecimentos, recomendo assistir algumas aulas no Youtube: Aulas GameMaker ou ler algum post anterior.
Chega de papo! Vamos praticar?

Abra o GameMaker Studio e crie um novo Projeto. Em seguida, siga as etapas abaixo. Primeiro, vamos criar as 4 Sprites do Jogo.

1. Clique com o Botão Direito em cima de Sprites e clique na opção Create Sprite. Na Janela de Propriedades da Sprite, clique em Load Sprite, selecione cada imagem abaixo e renomeie como na figura acima.




OBS.: Para realizar o procedimento, você precisa salvar as figuras acima em alguma Pasta do seu PC.
2. Agora, vamos criar os objetos do Jogo. Clique com botão direito em Objects e selecione Create Object. Selecione cada sprite a cada objeto correspondente. Figura abaixo:

Na janela de Propriedades do “obj_tiro”. Renomeie o objeto como “obj_tiro” em seguida, selecione a Sprite “tiro”. Na Janela de Eventos, adicione o evento “Create” e na Janela de Ações, adicione a ação “Speed Vertical”, e defina o valor para -25. Marque a caixa “Relative” e clique em Ok.

3. Ainda nas Propriedades do “obj_tiro”. Na Janela de Eventos, adicione o evento Colission com o “obj_nave_inimiga” e na Janela de Ações, adicione a ação “Set Score”, e defina o valor para 1. Marque a caixa “Relative” e clique em Ok. Ou seja toda vez que o tiro colidir com a nave inimiga ganharemos 1 ponto.

4. Ainda nas Propriedades do “obj_tiro”. No evento Colission com o “obj_nave_inimiga”, agora adicione a ação “Destroy Instance” e selecione a opção “Other” e clique em Ok. Ou seja, toda vez que o tiro colidir com a nave inimiga, a nave inimiga será destruída.

5. Ainda nas Propriedades do “obj_tiro”. No evento Colission com o “obj_nave_inimiga”, agora adicione a ação “Create Effect” e selecione a opção “Self”. Em type, selecione o efeito de “explosion” e no campo size, selecione “small”. No campo color, selecione a cor amarelo, marque a caixa “Relative” e clique em Ok. Ou seja, toda vez que o tiro colidir com a nave inimiga, ganharemos 1 ponto, a nave inimiga será destruída e ocorrerá o efeito de explosão. Clique em Ok novamente para salvar as Propriedades do “obj_tiro”.

6. Nas Propriedades do “obj_aviao”. Renomeie o objeto como “obj_aviao” em seguida, selecione a Sprite “aviao”. Na Janela de Eventos, adicione o evento “Keyboard – Space” e na Janela de Ações, adicione a ação “Create Instance”. Selecione o “obj_tiro”, defina o valor X para 25 e o valor Y para -25. Marque a caixa “Relative” e clique em Ok.

7. Ainda nas Propriedades do “obj_aviao”. Na Janela de Eventos, adicione o evento “Keyboard” para Left, Up, Right e Down. Na Janela de Ações, adicione a ação “Jump to Position” e defina os seguintes valores para X e Y.(Figura abaixo).

Left – X -5

Up – Y -5

Right – X 5

Down – Y 5
8. Nas Propriedades do “obj_nave_inimiga”. Renomeie o objeto como “obj_nave_inimiga” em seguida, selecione a Sprite “nave_inimiga”. Na Janela de Eventos, adicione o evento “Create” e na Janela de Ações, adicione a ação “Move Fixed”. Clique na seta para baixo e defina o speed para 5. Marque a caixa “Relative” e clique em Ok.

9. Ainda nas Propriedades do “obj_nave_inimiga”. No evento Colission com o “obj_aviao”, agora adicione a ação “Set Lives”. No campo New lives, coloque -1, marque a caixa “Relative” e clique em Ok.

10. Ainda nas Propriedades do “obj_nave_inimiga”. No evento Colission com o “obj_aviao”, agora adicione a ação “Destroy Instance”. Marque a opção “Self” e clique em Ok. Ou seja, toda vez que a nave inimiga tocar no avião, ela será destruída e perderemos 1 vida no jogo.

11. Nas Propriedades do “obj_nave_inimiga”. Na Janela de Eventos, adicione o evento “Other – Outside Room” e na Janela de Ações, adicione a ação “Destroy Instance”. Marque a opção “Self” e clique em Ok

12. Nas Propriedades do “obj_controle”. Renomeie o objeto como “obj_controle” e não coloque nenhuma Sprite. Na Janela de Eventos, adicione o evento “Create” e na Janela de Ações, adicione a ação “Execute a piece of code”. Na janela que abrir digite o seguinte código. (Figura abaixo). Depois clique no visto para salvar as configurações.

13. Ainda nas Propriedades do “obj_controle”. No evento “Create”, adicione a ação “Set Score”. Defina o “new score” para 0 e clique em Ok. Ou seja, assim que inicia o Jogo a pontuação será 0.

14. Ainda nas Propriedades do “obj_controle”. No evento “Create”, adicione a ação “Set Lives”. Defina o “new lives” para 3 e clique em Ok. Ou seja, assim que inicia o Jogo a pontuação será 0 e a quantidade de vidas será 3.

15. Nas Propriedades do “obj_controle”. Na Janela de Eventos, adicione o evento “Alarm 0” e na Janela de Ações, adicione a ação “Execute a piece of code”. Na janela que abrir digite o seguinte código. (Figura abaixo). Depois clique no visto para salvar as configurações.

OBS.: Cuidado! Verifique linha a linha para não digitar nenhum trecho incorreto.
Esse é o código para que “obj_vidas” caia de cima para baixo, a cada 5 segundos a uma velocidade vertical igual a 10.
16. Nas Propriedades do “obj_controle”. Na Janela de Eventos, adicione o evento “Step” e na Janela de Ações, adicione a ação “Test Lives”. Na janela que abrir digite 0 no campo “value” e no campo “operation”, selecione “equal to”. Depois clique em Ok. (Figura abaixo).

17. Ainda nas Propriedades do “obj_controle”. No evento “Step”, adicione a ação “Go to next room”. Ou seja, toda vez que a quantidade de vidas for igual a 0, o jogo irá para a próxima tela que exibirá a seguinte mensagem: “Você Perdeu!”. Ainda vamos criar essa mensagem. Calma! =)

18. Nas Propriedades do “obj_controle”. Na Janela de Eventos, adicione o evento “Draw” e na Janela de Ações, adicione a ação “Execute a piece of code”. Na janela que abrir digite o seguinte código. (Figura abaixo). Depois clique no visto para salvar as configurações.
OBS.: Esse é o código que mostrará a variável “segundos” no Jogo.

19. Nas Propriedades do “obj_controle”. No evento “Draw”, adicione a ação “Draw Score”. Na janela que abrir digite 20 no campo X e 10 no campo Y. Clique em Ok. (Figura abaixo).
OBS.: Essa é a configuração que mostrará a variável “Score” ou “Pontos” no Jogo.

20. Nas Propriedades do “obj_controle”. No evento “Draw”, adicione a ação “Draw Lives”. Na janela que abrir digite 800 no campo X e 10 no campo Y. Clique em Ok. Figura abaixo.
OBS.: Essa é a configuração que mostrará a variável “Lives” ou “Vidas” no Jogo.

21. Nas Propriedades do “obj_perdeu”. Renomeie o objeto como “obj_perdeu” e não coloque nenhuma Sprite. Na Janela de Eventos, adicione o evento “Draw” e na Janela de Ações, adicione a ação “Draw Scaled Text”. Na janela que abrir digite as seguintes configurações (Figura abaixo). Depois clique em Ok. Em seguida, clique em Ok novamente para salvar as Propriedades do “obj_perdeu”.

22. Nas Propriedades do objeto “controle_nave_inimiga”. Renomeie o objeto como “controle_nave_inimiga” e não coloque nenhuma Sprite. Na Janela de Eventos, adicione o evento “Create” e na Janela de Ações, adicione a ação “Set Alarm”. Na janela que abrir defina o campo “number of steps” para 45. Depois clique em Ok. (Figura abaixo).

23. Nas Propriedades do objeto “controle_nave_inimiga”. Na Janela de Eventos, adicione o evento “Alarm 0” e na Janela de Ações, adicione a ação “Create Moving”. Na janela que abrir faça as seguintes configurações. Depois clique em Ok. (Figura abaixo).
OBS.: A linha de comando “random(room_width-64)+32” gera objetos aleatórios da nave inimiga no Jogo.

24. Nas Propriedades do objeto “controle_nave_inimiga”. No evento “Alarm 0”, adicione a ação “Set Alarm”. Na janela que abrir faça as seguintes configurações. Depois clique em Ok. (Figura abaixo).

25. Nas Propriedades do objeto “controle_nave_inimiga”. Na Janela de Eventos, adicione o evento “Alarm 1” e na Janela de Ações, repita os passos 23 e 24.

OBS.: Na ação “Set Alarm”, na janela que abrir defina o campo “number of steps” para 5 e o campo “in alarm no” selecione a opção “Alarm 0”. Depois clique em Ok. Dessa forma estaremos criando um loop infinito, onde sempre aparecerá naves inimigas na tela depois de alguns segundos.

26. Ainda nas Propriedades do objeto “controle_nave_inimiga”. Adicione mais um evento “Alarm 2” e na Janela de Ações, adicione a ação “Create Moving”. Na janela que abrir faça as seguintes configurações. Depois clique em Ok. (Figura abaixo).
OBS.: Dessa vez, selecionamos o “obj_vidas” que também aparecerá na tela do Jogo de forma aleatória.

27. Ainda nas Propriedades do objeto “controle_nave_inimiga”. No evento “Alarm 2”, adicione a ação “Set Alarm”. Na janela que abrir faça as seguintes configurações. Depois clique em Ok. (Figura abaixo).

OBS.: Na ação “Set Alarm”, na janela que abrir defina o campo “number of steps” para 7 e o campo “in alarm no” selecione a opção “Alarm 0”. Depois clique em Ok. Dessa forma estaremos criando um loop infinito, onde sempre aparecerá vidas na tela depois de alguns segundos.
28. Nas Propriedades do “obj_vidas”. Renomeie o objeto como “obj_vidas” em seguida, selecione a Sprite “vidas”. Na Janela de Eventos, adicione o evento “Create” e na Janela de Ações, adicione a ação “Move Fixed”. Clique na seta para baixo e defina o speed para 5. Marque a caixa “Relative” e clique em Ok.

29. Ainda nas Propriedades do “obj_vidas”. No evento Colission com o “obj_aviao”, agora adicione a ação “Set Lives”. No campo New lives, coloque +1, marque a caixa “Relative” e clique em Ok.

30. Ainda nas Propriedades do “obj_vidas”. No evento Colission com o “obj_aviao”, agora adicione a ação “Destroy Instance”. Marque a opção “Self” e clique em Ok. Ou seja, toda vez que 0 “obj_vidas” tocar no avião, ele será destruído e ganharemos 1 vida no jogo.

31. Nas Propriedades do “obj_vidas”. Na Janela de Eventos, adicione o evento “Other – Outside Room” e na Janela de Ações, adicione a ação “Destroy Instance”. Marque a opção “Self” e clique em Ok.

32. Agora vamos criar as Telas do nosso Jogo. Clique com Botão Direito – Selecione a opção “Create Room” (Figura abaixo).

33. Na janela Propriedades da Room0, clique na Aba “objects”, selecione os objetos: “obj_aviao”, “obj_controle”, “controle_nave_inimiga” e coloque dentro da “room0”. Depois clique no “Visto” para salvar as alterações (Figura abaixo).

OBS.: Não se preocupe com o sinal de interrogação quando colocar os objetos “obj_controle” e “controle_nave_inimiga”. É porque não colocamos sprites nesses objetos.
34. Repita o passo 32 e crie uma nova “room”. Na janela Propriedades da Room1, clique na Aba “objects”, selecione o objeto “obj_perdeu” e coloque dentro da “room1”. Depois clique no “Visto” para salvar as alterações (Figura abaixo).

35. Pronto. Jogo concluído. Clique no Botão “Run the game” ou pressione a tecla “F5” para iniciar o jogo. (Figura abaixo).

36. Se tudo estiver correto, o jogo iniciará e mostrará uma janela parecida com a da figura abaixo.

Depois de alguns segundos as naves inimigas cairão de cima para baixo tentando colidir com o avião. Você deve destruí-las pressionando espaço para atirar ou usando as setas direcionais para desviar, conforme foi configurado na criação do Jogo.

Se você perder todas as vidas no Jogo, aparecerá a janela abaixo.

Parabéns! Você acaba de criar um Jogo de Nave. =)
OBS.: O jogo está bem simples e também faltando algumas partes como o Menu do Jogo, Sons, Efeitos, etc. Mas para fins didáticos e para você que está começando no mundo da criação de jogos, esse Tutorial pode ser o pontapé inicial para seus futuros projetos. Use as configurações apresentadas aqui, dê asas a sua imaginação e crie seus próprios jogos.
Bons estudos e divirta-se!

Quem gostou desse tutorial e poder me ajudar e ao mesmo tempo aprender mais sobre o GameMaker, agradeço. Basta inscreve-se em meu canal no Youtube: Aulas GameMaker
E dar aquele Like =) Desde já agradeço pessoal!
Abraço e fiquem com Deus.