Tutorial: GameMaker Studio – Parte 08: Alarmes, Sistema de Navegação e Telas de Opções

No tutorial anterior, mostrei como criar sprites animadas e como controlá-las para que a animação ocorra somente quando eu desejar.

Hoje vamos deixar de lado o gameplay e vamos começar a criar outras telas de jogo, como a Splash inicial (aquela imagens que aparecem no início do jogo), Menu e Opções.

Então, vamos lá!

Tela de Splash

A tela de Splash é a primeira tela que aparece para o jogador e vem antes do menu principal. Normalmente esta tela mostra as empresas envolvidas no jogo ou o nome do próprio jogo. Então, vamos usar a imagem abaixo como a tela de Splash. Para isso, baixe-a para o seu computador:

Agora que temos a imagem, vamos adicioná-la como um background, como fizemos no primeiro tutorial. Altere o nome do background para “bk_splash”. Quando terminar de fazer isso, teremos a seguinte tela:

Agora, vamos criar uma nova room e nomeá-la como “rm_splash”. Na tela de propriedades, vá na aba background e adicione o bk_splash como plano de fundo da room. No caso em que a imagem de fundo é menor que a room, podemos selecionar a opção “Stretch”, para que a ferramenta estique a imagem de forma que preencha toda a tela. Vamos selecioná-la para o caso do jogo ser executado em uma resolução maior que o tamanho padrão do GameMaker.

A tela de Splash está pronta. Agora temos que fazer algo para que ela seja exibida ao iniciar. Na pasta “Room” provavelmente deve estar assim:

Agora, arraste a “rm_splash” para um espaço acima da “rm_level1”. A pasta ficará com os arquivos desta forma:

O GameMaker usa a ordem das rooms para saber quem será exibido primeiro. Isto significa que colocando a room “rm_splash” antes do “rm_level1”, a tela de Splash seja exibida por primeiro, ao invés do primeiro nível. Teste o jogo e verá que isto é verdade.

 

Alarmes

Agora a tela de Splash está sendo exibida, mas tem um detalhe: não saímos mais dela. O que fazer? Para isto vamos utilizar Alarmes. Eles são usados quando precisamos executar algo de forma cronometrada. Então, para configurar os alarmes, criaremos um novo objeto chamado “obj_splash”. Note que este objeto não tem sprite, ele é um objeto abstrato sem forma. Agora vamos adicionar um evento “Create”. Na lista de comando, vá para a aba “Main2” e arraste o ícone “Set Alarm” () para o evento. Aqui aparecerão dois campos: o primeiro (Number of Steps) é a quantidade de passos em que o alarme será disparado. Por padrão do GameMaker, 1 segundo possui 30 passos, portanto, se quisermos 2 segundos de duração, colocaremos 60 passos. O segundo campo (in alarm no) é qual alarme usaremos para disparar. O GameMaker possui 12 alarmes numerados entre 0 e 11 que podemos usar simultaneamente. Este podemos deixar no 0. A configuração ficará assim:

Dê ok e agora vamos fazer o seguinte: Clique em “Add Event” e escolha a opção “Alarm”. Aparecerão 12 opções de alarmes, selecione o 0:

Os eventos de Alarmes são aqueles que são disparados quando um alarme dispara. Quando configuramos o alarme para disparar no evento “Create”, fizemos com que o alarme 0 dispare depois de 60 passos. Quando os 60 passos foram executados, todos os objetos que tiverem um evento de Alarme 0 serão executados juntos. No nosso caso, existe somente um objeto que tem este tipo de alarme, que é este que nós estamos programando.

Agora, na configuração do evento “Alarm 0”, procure na aba “Main1” o ícone “Next Room” (). Isto significa que quando o Alarme 0 for disparado, o GameMaker carregará a próxima Room, que no estado atual é o nível 1. Então, com isso falta apenas uma coisa: abra a “rm_splash” e na aba “Object” adicione na tela o “obj_splash”. Como o objeto não tem um corpo, vai aparecer um indicando a localização do objeto. A tela ficará assim:

Agora teste o jogo e veja como fica.

 

A tela de Menu

A tela de menu não será muito diferente aqui no começo. Primeiro vamos usar esta imagem como plano de fundo e chamá-la de bk_menu:

Vamos criar uma room chamada “rm_menu” e colocar a imagem como plano de fundo. E agora, algo importante é que devemos colocar na pasta “Room” o “rm_menu” abaixo do “rm_splash”, mas acima do “rm_level1”, para que quando a tela de Splash passar, ela vá para o menu e não para o jogo. A pasta deve ficar assim:

Agora precisaremos carregar alguns botões, que são estes

Para cada imagem, você vai importar como Sprite e vai gerar um objeto. Os nomes que usarei são:

  • spr_novoJogo, obj_novoJogo;
  • spr_opcoes, obj_opcoes;
  • spr_sair, obj_sair;

Agora vamos começar a configurar os botões, iniciando pelo botão “Novo Jogo”. Então, abra o obj_novoJogo, clique em “Add Event”, selecione “Mouse” e em seguida “Left Pressed”. Isto criará um evento que será ativado quando o jogador apertar o botão esquerdo do mouse sobre o objeto.

Agora, vamos fazer o que fizemos na tela de Splash e arrastar a função “Next Room” neste evento que acabamos de criar. Finalmente, para podermos testar, abra a rm_menu e adicione o obj_novoJogo na tela.

Em seguida, vamos configurar o botão de sair. Faça os mesmos procedimentos de criar o evento “Left Pressed”. Entretanto, vamos adicionar o comando “End Game” ()da aba “main2”, ao invés de mandar para a próxima tela. E assim como o botão “Novo Jogo”, vamos adicionar o botão “Sair” na tela. Aproveitamos também e já adicionamos o próximo botão que é o “Opções”. Ficará algo assim:

 

Tela Opções

Temos um terceiro botão que não configuramos, porque ainda não temos uma tela para as opções de jogos. Então, vamos criar uma room chamada rm_opcoes com este fundo:

E já para facilitar, vamos criar um botão com este sprite que será chamado de spr_voltar e que usará esta imagem:

E para este botão, será criado um objeto chamado obj_voltar. Não esqueça de adicionar o botão na rm_opcao, que deverá ficar assim:

Neste caso, a posição da room não importará, porque a tela de Opções é do mesmo nível da tela de jogo. Entretanto, isto significará uma pequena mudança na programação. Então, vamos criar o evento “Left Pressed” no obj_opcoes e usaremos o comando “Different Room” (), que abrirá uma tela que perguntará qual room você quer que vá. Escolha a “rm_opcoes” e dê um ok.

Agora, faça a mesma coisa para o obj_voltar, só que a room que você escolherá vai ser a rm_menu:

Isto conclui a parte de navegação entre as telas, mas não conclui a tela de opções. Precisamos fazer com que o computador dê a opção de ativar e desativar a música. Para isso, primeiro vamos criar uma fonte para ser usada. Clique na pasta “Fonts” com o botão direito e clique em “Create Font”.

Dê o nome de “font_opcoes”, escolha uma fonte que você deseja usar para listar as opções e dê um ok. Precisamos definir uma fonte porque o GameMaker as compila de forma que fiquem disponíveis, independente da plataforma que esteja executando. Enfim, as minhas configurações foram estas:


Courier New, 30

Agora criaremos a opção de ativar ou desativar os sons. Primeiro, vamos criar um sprite com estas duas imagens:

Para quem lembra do tutorial passado, clique e arraste ambas as imagens e diga que é para formar um Sprite. Tente fazer com que a caixa com X seja o primeiro quadro. Agora vamos nomear o sprite como “spr_box”. Também crie um objeto chamado “obj_sndOpcao” que utilize este Sprite e já adicionaremos na room rm_opcoes:

Agora crie um evento “Create” e adicione o seguinte código:

01. image_speed = 0;
02. draw_set_font(font_opcao);

A primeira linha vai paralisar a suposta animação de frames. A segunda linha é uma variável que diz que a música está ligada e a última está indicando a fonte que será usada para elementos escritos.

Agora, crie um evento “Draw GUI” que serve para atualizar a HUD. Vamos adicionar o seguinte código:

01. draw_text(x+sprite_width,y,”Sons”);

Aqui dizemos que é para escrever o texto “Sons” na posição x do objeto mais a largura do Sprite e na mesma altura da posição y do objeto. O texto sempre ficará do lado direito ao do ponto x indicado e a base da linha sempre será a altura do y indicado.

Agora, vamos criar um evento “Left Pressed” e adicionar o seguinte código:

01. if(image_index == 0){
02.     image_index = 1;
03. }else{
04.     image_index = 0;
05. }

Ok, agora está certinho, mas falta um detalhe: a música executa apenas durante o jogo. Vamos alterar isto? Primeiro, abra a rm_level1 e entre no Creation Code. Deve ter este código aqui:

01. if (audio_is_playing(snd_FunInABottle) == false) {
02.     audio_play_sound(snd_FunInABottle, 0, true);
03. }

Copie o código e delete-o deste lugar. Agora abra a “rm_splash”, entre no botão “Creation Code” e cole este mesmo código. Isto fará com que a música inicie desde o começo. Com o código copiado, abra o obj_sndOpcao e vamos alterar o código do evento “Left Pressed” para ficar deste jeito:

01. if(image_index == 0){
02.     image_index = 1;
03.     audio_stop_all();
04. }else{
05.     image_index = 0;
06.     audio_play_sound(snd_FunInABottle, 0, true);
07. }

Assim a música parará ou recomeçará de acordo com a opção escolhida. Entretanto, se testar agora, notará que não funciona para os efeitos especiais. Vamos dar um jeito condicionando os efeitos especiais  verificar se a música está sendo reproduzida. Então abra o “obj_bola” e altere o código do evento da colisão com a flor para isto:

01. if (audio_is_playing(snd_FunInABottle) == true){
02.     audio_emitter_pitch(emit, tom);
03.     audio_play_sound_on(emit,snd_EyePoke,false,0);
04.     if (tom < 2){
05.         tom += 0.1;
06.     }
07. }

Aqui apenas condicionamos o código já existente a ser executado somente se a música estiver tocando. Caso contrário, o código será apenas ignorado.

 

Conclusão

Então pessoal, no tutorial de hoje tivemos bastantes coisas novas. Aprendemos a criar um sistema de navegação entre as telas, aprendemos a utilizar alarmes e como criar uma tela de opções. No próximo tutorial ensinarei como montar um sistema de fases e a salvar dados do jogo. Não percam e até a próxima!

Thalisson Christiano de Almeida

Thalisson Christiano de Almeida

Formado em Ciência da Computação (UDESC). Foi Programador da Céu Games e professor do Técnico em Informática do SENAI-SC. Atualmente, trabalha na empresa By Seven. Já foi jogador de xadrez e praticou kung-fu, ambos por 4 anos. Hoje é praticante do Jiu-jitsu, esperando que não fique nos 4 anos. Não tem preferência de tipos de jogos em especifico, variando desde jogos casuais de Facebook até jogos mais hardcore.

Send this to a friend