Tutorial: Desenvolvimento de Jogos para Android – Parte 5

A inclusão de efeitos sonoros e músicas de fundo são importantíssimas no desenvolvimento de jogos eletrônicos. Muitos jogos são reconhecidos pelas suas músicas de fundo. Posso dar os exemplos de uma das músicas da trilha do The Legend of Zelda e do efeito sonoro de vitória da série Final Fantasy. Vamos incluir agora mesmo os efeitos sonoros no Jokenpô. *_*

No tutorial anterior nós vimos como a lógica do Jokenpô foi programada na linguagem Java. Vimos também como a tela principal do jogo foi modelada em um arquivo XML. Nesse tutorial eu vou mostrar para vocês como é fácil incluir efeitos sonoros e músicas de fundo no seu jogo que executa na plataforma Android. Vamos lá?

 

Classe MediaPlayer:

Então pessoal, iniciando o tutorial, eu vou falar sobre um dos pontos positivos da linguagem Java e da maioria das linguagens orientadas a objetos. Se você precisa programar algo que é padrão em vários aplicativos, pode ter certeza que já existe isso implementado para você. No nosso caso, usaremos uma classe que lê e toca vários tipos de arquivos de som no Android. Apresento a vocês a classe MediaPlayer.

Figura 1 – Diagrama de Estados da classe MediaPlayer

A Figura 1 mostra o diagrama de estados da classe MediaPlayer. Ali vocês verão que uma música pode estar no estado “iniciada” (Started) e pode passar para o estado “reprodução concluída” (PlaybackCompleted), por exemplo. Nesse tutorial nós não aplicaremos cada um desses estados, mas saibam que vocês podem pausar a música (quando o telefone toca, por exemplo) chamando o método “pause” enquanto a música está sendo tocada (Started).
A classe MediaPlayer suporta vários tipos de arquivos de áudio, entre eles podemos listar os arquivos MP3, WAVE, MIDI, AAC e mais alguns (veja toda a lista aqui). O que vocês acham de colocarmos esse aprendizado em prática? o

 

Tocando os efeitos no Jokenpô:
Primeiramente, precisamos adicionar no projeto do Android uma pasta chamada “raw”. Para isso, clique com o botão direito do mouse na pasta “res”, selecione “New” e clique em “Folder”. Dê o nome da pasta a ser criada de “raw” e clique em “Finish”. Após isso será criada uma nova pasta chamada “raw” dentro da pasta “res”. A Figura 2 mostra certinho o procedimento.

Figura 2 – Criando a pasta “raw”

Após ter sido criada a pasta “raw”, adicione nela os arquivos MP3 compactados nesse arquivo que eu disponibilizei para vocês testarem. As músicas contidas aqui são livres para serem usadas em qualquer jogo. Eu tirei essas músicas desse site. Quando vocês forem fazer o jogo de vocês com outras músicas, atentem aos direitos autorais delas. Para adicionar essas músicas em “raw”, basta arrastar os arquivos MP3 para a pasta “raw” dentro do próprio Eclipse.
Após isso, atualize o projeto com esses arquivos adicionados. Para isso abra o menu superior “Project” e clique em “Clean …”. Na janela que abrir, selecione a opção “Clean all projects” e clique em “OK”. A Figura 3 mostra a explicação dada em sequência de cliques.

Figura 3 – Atualizando o projeto Android

Agora basta abrir os arquivos MP3 e tocá-los quando quisermos. Coloquei dois arquivos de efeito sonoro: um toca quando o jogador ganha do PC e o outro toca quando o jogador perde. Estamos no momento de voltar a mexer nos códigos Java.
Abra o arquivo “JokenpoActivity.java” dentro da pasta “src”. Serão adicionadas nesse arquivo as seguintes linhas de código.

MediaPlayer m = MediaPlayer.create(this,R.raw.win);

m.start();

Na primeira linha estamos abrindo um arquivo MP3 contido na pasta “raw” e na segunda estamos dando o play no arquivo aberto.
Como queremos tocar o mesmo som sempre quando o jogador ganha, então, em todo o código, onde estiver a linha:

findViewById(R.id.imageView2).setBackgroundResource(R.drawable.venceu);

adicione, logo abaixo, as linhas:

MediaPlayer m = MediaPlayer.create(this,R.raw.win);

m.start();

Como essas linhas sempre serão adicionadas dentro de uma estrutura de seleção (if), então será necessário que você inclua chaves antes e depois delas. Ficará exatamente dessa forma:

{

findViewById(R.id.imageView2).setBackgroundResource(R.drawable.venceu);

MediaPlayer m = MediaPlayer.create(this,R.raw.win);

m.start();

}

Para que seja tocado um efeito sonoro também quando o jogador perde, em todo o código, adicione as linhas:

MediaPlayer m = MediaPlayer.create(this,R.raw.lose);

m.start();

logo abaixo da linha:

findViewById(R.id.imageView2).setBackgroundResource(R.drawable.perdeu);

Atente-se ao fato de que essas linhas também precisam estar dentro de um mesmo bloco limitado por chaves, ficando:

{

findViewById(R.id.imageView2).setBackgroundResource(R.drawable.perdeu);

MediaPlayer m = MediaPlayer.create(this,R.raw.lose);

m.start();

}

Após você adicionar essas linhas, o jogo está pronto para ser executado.
Percebeu os sons que tocam quando você ganha e quando você perde? =]
Vale lembrar que não adicionamos os efeitos sonoros que tocam quando o jogador empata. Mas acho que vocês estão aptos para incluir esse efeito a partir de agora. ;D
Caso, no seu jogo, você precise pausar ou continuar uma música de fundo, por exemplo, dê uma olhada melhor nos métodos da classe MediaPlayer e no diagrama que eu apresentei na Figura 1.

Com isso, concluímos mais um tutorial de desenvolvimento de jogos para plataforma Android. Aprendemos como incluir efeitos sonoros e músicas de fundo em um jogo. No próximo tutorial eu iniciarei o desenvolvimento de jogos com a utilização de um motor gráfico muito bom: o Cocos2d-X.
Falarei sobre os seus pontos positivos e negativos no próximo tutorial.

Então é isso meu povo … um grande abraço e até mais. []

Santiago Viertel

Santiago Viertel

Formado em Bacharelado em Ciência da Computação (UDESC), mestre e doutorando em Análise de Algoritmos (UFPR). Foi programador da Céu Games por 8 anos. Possui a preferência por jogos de estratégia e de tiro em primeira pessoa. Jogando bastante DotA 2, Left 4 Dead 2 e Age of Empires II HD.

Send this to a friend