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
- spr_novoJogo, obj_novoJogo;
- spr_opcoes, obj_opcoes;
- spr_sair, obj_sair;
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:
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:
Agora criaremos a opção de ativar ou desativar os sons. Primeiro, vamos criar um sprite com estas duas imagens:
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.