Leite Anderson - Desenvolvimento de Jogos para iOS стр 15.

Шрифт
Фон

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

Ваша оценка очень важна

0
Шрифт
Фон

Помогите Вашим друзьям узнать о библиотеке