parâmetros da tela.
A vantagem de utilizar uma macro, é que caso haja necessidade, poderemos
alterá-la para responder por diferentes tamanhos de tela para cada tipo de aparelho.
68
Casa do Código
Capítulo 4. Tela inicial: Lidando com Background, logo e botões de menu
Director
O CCDirector é o componente principal que executa o game. É ele quem
controla o FPS, tamanho da tela, resolução, e também cuida das transições entre
scenes, ou seja, transições de telas do jogo. Ele é um Singleton que sabe qual
tela está ativa no momento e gerencia uma pilha de telas, aguardando suas chamadas para fazer as transições.
Vamos criar a classe
DeviceSettings, responsável por acessar o
CCDirector e retornar as medidas e configurações do dispositivo.
Crie a classe DeviceSettings, subclasse de um NSObject, e no header dela
declare as seguintes macros:
# define SCREEN_WIDTH() \
[CCDirector sharedDirector].winSize.width
# define SCREEN_HEIGHT() \
[CCDirector
sharedDirector].winSize.height
# define WIN_SIZE() \
[CCDirector sharedDirector].winSize
Como importaremos a DeviceSettings em diversas outras classes do projeto,
vamos aproveitar e incluí-la em nosso arquivo Prefix.pch:
//...
# ifdef __OBJC__
# import <UIKit / UIKit.h>
# import <Foundation / Foundation.h>
# import "cocos2d.h"
# import "Assets.h"
# import "DeviceSettings.h"
# endif
Com isso, podemos refatorar o posicionamento do background no init da
TitleScreen.m para ficar como a seguir.
//...
background.position = ccp(SCREEN_WIDTH() / 2.0f, SCREEN_HEIGHT() / 2.0f);
//...
O CCDirector é também responsável pela inicialização da tela de abertura.
69
4.6. Capturando configurações iniciais do dispositivo
Casa do Código
Iniciando a tela de abertura
Tela inicial preparada! Agora precisamos fazer a transição, ou seja, devemos
informar ao Cocos2D para iniciar a tela de abertura.
Sempre após iniciar o game, o Cocos2D irá chamar a scene padrão
IntroLayer. Esta scene é uma tela bem simples e leve, que é rapidamente carre-
gada ao abrir o aplicativo, evitando que a tela pisque a transição entre nossa Splash Screen e a tela inicial do game.
Primeiramente, vamos ajustar a orientação da imagem exibida em nossa
IntroLayer. Altere o método init da IntroLayer.m para não girar nossa
imagem de abertura:
-(id) init
{
if( (self=[super init])) {
// ask director for the window size
CGSize size = [[CCDirector sharedDirector] winSize];
CCSprite *background;
if( UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPhone ) {
background =
[CCSprite spriteWithFile:@"Default-568h@2x.png"];
//background = [CCSprite spriteWithFile:@"Default.png"];
//background.rotation = 90;
} else {
background =
[CCSprite spriteWithFile:@"Default-Landscape~ipad.png"];
}
background.position = ccp(size.width/2, size.height/2);
// add the label as a child to this Layer
[self addChild: background];
}
return self;
}
Agora vamos alterar a IntroLayer.m para que chame nossa TitleScreen
após abertura do game. Um objeto muito importante do Cocos2D será utilizado para
70
Casa do Código
Capítulo 4. Tela inicial: Lidando com Background, logo e botões de menu
esse controle. Utilizaremos o CCDirector novamente, dessa vez para apresentar
uma nova tela, utilizando o método replaceScene: e passando como parâmetro
a TitleScreen, que é nossa tela inicial.
# import "TitleScreen.h"
//...
@implementation IntroLayer
//...
-(void) onEnter
{
[super onEnter];
[[CCDirector sharedDirector] replaceScene:
[CCTransitionFade transitionWithDuration:1.0
scene:[TitleScreen scene] ]];
}
@end
Já é possível rodar o projeto e ver a tela de abertura com o background configu-
rado! Faça o teste.
4.7
Logo
Vamos utilizar a mesma ideia e colocar um logo do jogo no topo da tela.
O logo é uma imagem simples e imagens são coordenadas por objetos que cha-
mamos de Sprites. Criaremos um Sprite de forma simples para posicionar
o logo e utilizaremos o método setPosition: para que o Cocos2D saiba onde
colocar o elemento.
Pra finalizar, basta adicionar o logo à tela inicial com o método addChild:.
Mude o init de sua TitleScreen.m:
- (id)init
{
self = [super init];
if (self) {
//...
// Imagem de Logo
CCSprite *title = [CCSprite spriteWithFile:kLOGO];
title.position =
ccp(SCREEN_WIDTH() / 2.0f, SCREEN_HEIGHT() - 130.0f);
71
4.8. Botões
Casa do Código
[self addChild:title];
}
return self;
}
@end
Ao rodar o projeto já temos as imagens de background e logo do jogo posicio-
nados.
4.8
Botões
Os botões são partes importantíssimas do jogo. É a partir deles que o usuário interage com o game e que recebemos comandos para transicionar as telas e, mais à frente,
mover o player, atirar etc.
Utilizando o Cocos2D o trabalho com inputs de botões
fica bem mais simples,
não precisando detectar a posição do toque na tela e comparar com o posiciona-
mento dos Sprites. Esse trabalho será feito pelo framework e o jogo pode se pre-
ocupar com a lógica em si.
No Cocos2D, a classe CCMenuItem e suas subclasses representam os botões, e a