Figura 4.4: Simulador com Hello World do Cocos2D.
61
4.3. ajustando a orientação
Casa do Código
Você percebeu os números que aparecem no canto inferior esquerdo do simula-
dor? Estes números indicam o consumo de memória, tempo entre um game loop e
outro, e a quantidade de frames por segundo. Estas informações são bastante úteis caso você perceba que seu jogo está muito lento e queira verificar a que velocidade ele está sendo executado.
Para
nosso
game,
vamos
retirar
estes
números
da
tela.
Para
isto,
no
arquivo
AppDelegate.,
no
método
application:didFinishLaunchingWithOptions:
vamos alterar a op-
ção de exibir FPS para não:
//...
// Display FSP and SPF
[director_ setDisplayStats:NO];
//...
4.3
ajustando a orientação
Por padrão, o Cocos2D inicia um novo projeto com a orientação do aparelho em
modo paisagem. Para nosso game, alteraremos o projeto para rodar o jogo em
modo retrato. Abra as configurações do projeto em Supported Interfaces
Orientations e marque apenas a opção Portrait:
Figura 4.5: Configurando projeto em modo retrato.
No
AppDelegate.m,
dentro
do
@implementation
da
MyNavigationController, altere os seguintes métodos padrões para que a
tela não gire quando o aparelho mudar de posição:
- (NSUInteger)supportedInterfaceOrientations
{
return UIInterfaceOrientationMaskPortrait;
}
62
Casa do Código
Capítulo 4. Tela inicial: Lidando com Background, logo e botões de menu
- (BOOL)shouldAutorotateToInterfaceOrientation:
(UIInterfaceOrientation)interfaceOrientation
{
return interfaceOrientation == UIInterfaceOrientationPortrait;
}
Rode o game e agora o Hello World deverá aparecer em modo retrato:
Figura 4.6: Simulador com Hello World em modo retrato.
63
4.4. Background
Casa do Código
4.4
Background
A primeira tela do game é a tela de abertura, e no Cocos2D, utilizamos uma classe chamada CCLayer para identificar cada tela do jogo. Ao herdar dessa classe do
framework, ganhamos alguns reconhecimentos do Cocos2D, como conseguir fazer
a transição entre as telas com apenas uma linha de código.
Uma classe que herda de CCLayer não precisa ter muitos códigos do framework,
podemos criar nossa tela inicial como bem entendermos, apenas utilizando esse
comportamento para informar ao framework que tipo de objeto estamos represen-
tando.
Layers
Criar telas com o CCLayer do Cocos2D é criar telas pensando em camadas que
se sobrepõem. Essas camadas são transparentes, a menos quando definidas de outra
forma, e quando colocadas uma sobre as outras definem a tela final.
Na tela de abertura, podemos pensar em camadas para a imagem de background,
para o logo e para o menu.
Criaremos uma classe chamada TitleScreen. Você pode criá-la no diretório
ou grupo do projeto que desejar. No nosso projeto, utilizamos o diretório Scenes.
Lembre-se de organizar suas classes em grupos significativos.
Nesta classe, utilizaremos um segundo componente do Cocos2D. Para instanciar
uma tela no framework, utilizamos a classe CCScene, que é devolvida já pronta para utilizarmos quando invocamos
o método node.
Scenes
Outro objeto importante do Cocos2D são as Scenes. Com elas, conseguimos
inicializar telas do jogo. Um jogo pode ter quantas Scenes forem necessárias, po-
rém apenas uma estará ativa por vez.
Por exemplo, no nosso jogo teremos a tela de abertura, a tela do jogo, a tela de
ajuda, a tela de pause etc. Cada uma delas é um Scene.
Vamos ao código inicial da tela de abertura. Precisamos de uma classe que saiba
trabalhar com camadas e de uma tela. Criaremos a classe TitleScreen que re-
ceberá essas definições de camadas e a adicionaremos em uma Scene, formando a
base da tela inicial.
Criaremos o método scene, responsável por instanciar nossa classe e retorná-la
dentro de uma Scene. Você perceberá ao longo do livro que todas as scenes que
64
Casa do Código
Capítulo 4. Tela inicial: Lidando com Background, logo e botões de menu
criarmos terão este método.
No header TitleScreen.h iremos declarar o método scene:
# import "cocos2d.h"
@interface TitleScreen : CCLayer
+ (CCScene *)scene;
@end
E no implementation TitleScreen.m vamos implementar o método. Você
pode copiá-lo da classe HelloWorldLayer, criada pelo Cocos2D.
+ (CCScene *)scene
{
// 'scene' is an autorelease object.
CCScene *scene = [CCScene node];
// 'layer' is an autorelease object.
TitleScreen *layer = [TitleScreen node];
// add layer as a child to scene
[scene addChild:layer];
// return the scene
return scene;
}
O código anterior prepara a tela para utilização e posicionamento dos elementos,
no nosso caso, esses elementos serão background, logo e botões.
Vamos iniciar configurando o background do game. Assim como botões ou logo,
o background também é um objeto representado por uma imagem. Lembre-se que
para manipular imagens temos o conceito de Sprites, que basicamente é um ob-
jeto associado à uma figura.
Sprites
Um Sprite no Cocos2D é como qualquer outro Sprite, ou seja, uma imagem
2D que pode ser movida, rotacionada, animada, ter sua escala alterada etc. Umas das 65