self.score = 0;
// Posiciona o Placar recém criado
self.position =
ccp(SCREEN_WIDTH() - 50.0f, SCREEN_HEIGHT() - 50.0f);
124
Casa do Código
Capítulo 7. Detectando colisões, pontuando e criando efeitos
// Adiciona o Player na tela, como um texto para o jogador
self.text = [CCLabelBMFont labelWithString:
[NSString stringWithFormat:@"%d", self.score]
fntFile:@"UniSansSemiBold_Numbers_240.fnt"];
self.text.scale = (float)(240.0f / 240.0f);
[self addChild:self.text];
}
return self;
}
Implemente também o método increase. Seu código é simples, apenas incre-
menta a variável score e configura novamente o texto do placar.
- (void)increase
{
// Aumenta a pontuação e atualiza o Placar
self.score++;
self.text.string = [NSString stringWithFormat:@"%d", self.score];
}
Agora que temos a camada do placar preparada, vamos adicioná-la à tela princi-
pal. Para isso, criaremos dois objetos: um do tipo CCLayer e outro do tipo Score.
Na GameScene.h adicione:
# import "Score.h"
//...
@property (nonatomic, retain) CCLayer *scoreLayer;
@property (nonatomic, retain) Score *score;
É necessário iniciar a camada e adicioná-la a tela. No init da GameScene.m
adicione:
- (id)init
{
self = [super init];
if (self) {
//...
// CCLayer para o Placar
self.scoreLayer = [CCLayer node];
[self addChild:self.scoreLayer];
}
125
7.5. Conclusão
Casa do Código
return self;
}
Para finalizar, basta criar o objeto do tipo Score e adicionar a camada corres-
pondente.
Ainda
na
classe
GameScene
adicione
essa
chamada
ao
método
addGameObjects:
- (void)addGameObjects
{
//...
// Cria o Placar
self.score = [Score score];
[self.scoreLayer addChild:self.score];
}
Agora altere o método meteorHit:withShoot: para que aumente o score
quando houver colisão entre um tiro e um meteoro:
- (void)meteorHit:(id)meteor withShoot:(id)shoot
{
//...
// Aumenta a pontuação
[self.score increase];
}
7.5
Conclusão
Detectar colisões de forma manual, como feito no capítulo do protótipo, não é tão simples e envolve muitos cálculos matemáticos. Porém, utilizando um framework
como o Cocos2D as coisas são facilitadas.
Nesse capítulo passamos pelo que pode ser considerado
o coração do jogo, a
detecção de colisões. A partir delas, executamos efeitos e atualizamos a tela para o jogador.
O próximo capítulo tratará de uma parte muito importante para dar vida aos
jogos, os sons e efeitos.
126
Capítulo 8
Adicionando sons e música
Os sons são de fundamental importância no desenvolvimento de um game. Hoje
existem profissões como sound designers que trabalham especificamente criando os
sons dos games. Muitos jogos utilizam orquestras para executar sua trilha sonora.
A música dá vida ao jogo, torna-o mais divertido e dá respostas ao jogador para
as partes importantes.
Existem duas formas principais de sons no mundo dos games: música e efeitos.
Quando o jogo começa, uma música de fundo normalmente dá o clima do jogo.
Essa música é normalmente executada em background e se repete inúmeras vezes ao
longo do game. Além dela, existem os efeitos de som gerados em momentos impor-
tantes, como quando uma colisão é detectada ou quando o placar é alterado
Para o nosso jogo, utilizaremos sons encontrados gratuitamente no site http://
www.freesound.org/. Você pode buscar diversos tipos de sons nesse site para o seu próximo game!
8.1. Executando sons
Casa do Código
8.1
Executando sons
Nessa primeira etapa utilizaremos o framework Cocos2D para adicionar som a 3
eventos do jogo. Utilizaremos 3 arquivos de sons diferentes:
Disparo de um tiro
Colisão do tiro com um meteoro
Colisão entre meteoro e avião
Podemos utilizar os formatos mais comuns para adicionar sons ao nosso
jogo, e aqui o formato escolhido será wav. Colocaremos os sons no diretório
Resources/Sounds do nosso projeto.
Você pode encontrar todos os sons que serão utilizados nesse capítulo nesse link: https://github.com/bivissoft/jogos_ios_14bis
SoundEngine
Para lidar com sons,
o Cocos2D disponibiliza uma classe chamada
SimpleAudioEngine, que possui diversos métodos que possibilitam traba-
lhar com sons e música no game. Para utilizar essa classe não é necessário criar
uma instância, mas sim utilizar um Singleton disponibilizado pelo framework.
Para isso executamos [SimpleAudioEngine sharedEngine] tendo acesso às
opções de sons de que precisamos.
Com esse acesso, podemos executar músicas e sons, parar e iniciar arquivos de
áudio, aumentar e diminuir o volume etc. Nesse momento, iniciaremos executando
3 sons utilizando o método playEffect:. Esse método recebe como parâmetro o
nome do arquivo de áudio.
Para facilitar, importaremos a classe
SimpleAudioEngine no arquivo
Prefix.pch:
# ifdef __OBJC__
//...
# import "SimpleAudioEngine.h"
# endif
O primeiro efeito de som, o tiro, será colocado na classe Shoot. Adicione o
código abaixo ao método start da Shoot.m:
128
Casa do Código
Capítulo 8. Adicionando sons e música
- (void)start
{
//...
// Som do Tiro