mudam a posição horizontal da nave. Declare os métodos na Player.h.
- (void)moveLeft;
107
6.4. Movendo o player
Casa do Código
- (void)moveRight;
Vamos implementar os métodos de movimentação na Player.m:
- (void)moveLeft
{
// Move o Player para a Esquerda
if (self.positionX > 30.0f) {
self.positionX -= 10.0f;
}
self.position = ccp(self.positionX, self.positionY);
}
- (void)moveRight
{
// Move o Player para a Direita
if (self.positionX < SCREEN_WIDTH() - 30.0f) {
self.positionX += 10.0f;
}
self.position = ccp(self.positionX, self.positionY);
}
Na GameScene.m alteraremos os métodos para que essas ações sejam chamadas
pelos botões.
- (void)moveLeft:(id)sender
{
NSLog(@"Botão selecionado: Esquerda");
[self.player moveLeft];
}
- (void)moveRight:(id)sender
{
NSLog(@"Botão selecionado: Direita");
[self.player moveRight];
}
Ao rodar o projeto, devemos ter a nave se movimentando a partir dos toques no
comando de controle da nave. Além disso ela já atira de acordo com a posição do
Player.
108
Casa do Código
Capítulo 6. Criando o Player
6.5
Conclusão
Esse é um capítulo muito importante para o desenvolvimento do jogo. Além de usar
diversos elementos do framework Cocos2D, como camadas, sprites e agendamento
(update), diversos conceitos de jogos foram usados, além de práticas como delegates e engines.
O jogo deve estar como na figura abaixo.
Figura 6.5: 14 bis atirando contra os meteoros.
É hora de verificar as colisões!
109
Capítulo 7
Detectando colisões, pontuando e
criando efeitos
Colisões são o coração dos games. Seja um soco de um personagem no outro, seja
o personagem principal capturando algum elemento, ou como no jogo que estamos
programando, um tiro que atinge um meteoro.
Detectar que um elemento encostou em outro é um assunto que pode ser muito
complexo. Como mostrado no capítulo do protótipo que desenvolvemos, podemos
detectar colisões considerando figuras geométricas em volta dos elementos para facilitar.
No capítulo atual, detectaremos colisões em duas situações.
Quando um tiro atinge um meteoro
Quando um meteoro atinge o avião (game over)
Veremos aqui mais uma vez que utilizar um framework de desenvolvimento de
jogos como o Cocos2D ajuda muito nesse trabalho.
7.1. Detectando colisões
Casa do Código
Uma vez detectadas as colisões, utilizaremos os efeitos do Cocos2D para gerar
uma animação quando a detecção ocorrer. Em outra parte importante desse capí-
tulo, falaremos sobre a atualização do placar. Essa deve ser uma parte tranquila pois utilizará conceitos já vistos anteriormente, como camadas e sprites.
Esse capítulo trará novos códigos e mais utilização do framework Cocos2D,
sendo um capítulo chave para o desenvolvimento do jogo.
7.1
Detectando colisões
A primeira coisa que precisamos para identificar a colisão entre objetos no game
é definir uma estratégia para isso. Nesse jogo, a estratégia será analisar um grupo de objetos em um array, com cada objeto de um outro grupo. Ou seja, dados dois
arrays, verificar se algum elemento de um array sobrepõe
outro.
Na GameScene.h criaremos um NSMutableArray para o player que, inici-
almente, terá um único jogador.
@property (nonatomic, retain) NSMutableArray *playersArray;
E adicionaremos esse player no array de objetos na GameScene.m. Mais pra
frente você poderá evoluir o jogo e controlar mais de um player.
- (void)addGameObjects
{
//...
// Insere o Player no array de Players
self.playersArray = [NSMutableArray array];
[self.playersArray addObject:self.player];
}
Definindo as bordas
Precisamos agora de uma forma de definir as bordas ou limites do tiro, da nave
e dos meteoros, para que seja possível fazer a detecção da colisão.
No protótipo, utilizamos a estratégia de círculos. Para o jogo atual, utilizaremos uma estratégia de quadrados ou retângulos.
Como estamos utilizando o Cocos2D e seus Sprites podemos mais facilmente
conseguir essas informações.
Precisaremos de um método do Sprite que devolva um retângulo, que conte-
nha as bordas do elemento. Para isso, utilizaremos um método que existe nos pró-
112
Casa do Código
Capítulo 7. Detectando colisões, pontuando e criando efeitos
prios Sprites chamado boundingBox. Esse método devolve um tipo CGRect, que
representa os contornos da figura mapeados em forma retangular.
Com esse método, sabemos as coordenadas do posicionamento do objeto a ser
analisado.
Checando a colisão
Uma vez que já conseguimos os valores de um elemento do jogo, suas bordas
e posição na tela, podemos utilizar a estratégia que falamos no começo do capítulo para identificar se um elemento colide com outro durante o jogo.
Criaremos um método importante para checar as colisões, que precisa de alguns
parâmetros para funcionar. Os dois primeiros são arrays de objetos a serem veri-
ficados. Ou seja, se queremos checar se os tiros estão colidindo com os meteoros, passaremos esses dois arrays. Outro ponto importante é passar uma referência da
tela de jogo, no caso a GameScene. Precisamos disso para poder executar algum