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

Шрифт
Фон

78

Casa do Código

Capítulo 5. Tela do jogo e objetos inimigos

O Maestro

Idealmente, essa classe não deve ter muitas responsabilidades, mas sim funci-

onar como um orquestrador de todos os elementos, ou seja, um maestro em uma

orquestra, que dirige e comanda o que todos os outros elementos fazem e como eles interagem entre si.

Ela será a classe que inicializa objetos no jogo, que coloca objetos na tela, porém o comportamento de cada um deles será representado individualmente em cada classe

correspondente.

Algumas das responsabilidades da GameScene, a classe maestro do jogo, devem

ser:

Iniciar a tela do game e organizar as camadas

Adicionar objetos como player, inimigos e botões à essas camadas

Inicializar cada um desses objetos

Checar colisões entre objetos

A classe GameScene tem muita responsabilidade, porém não detém regras e

lógicas de cada elemento. Outra função importante dessa classe é aplicar um dos

conceitos vistos anteriormente, do game loop.

Vamos então criar a classe GameScene já colocando um background como fi-

zemos anteriormente na tela de abertura. O header GameScene.h ficará assim:

@interface GameScene : CCLayer

+ (CCScene *)scene;

@end

E o implementation GameScene.m

# import "GameScene.h"

@implementation GameScene

+ (CCScene *)scene

{

// 'scene' is an autorelease object.

79

5.2. Transição de telas

Casa do Código

CCScene *scene = [CCScene node];

// 'layer' is an autorelease object.

GameScene *layer = [GameScene node];

// add layer as a child to scene

[scene addChild:layer];

// return the scene

return scene;

}

- (id)init

{

self = [super init];

if (self) {

// Imagem de Background

CCSprite *background = [CCSprite spriteWithFile:kBACKGROUND];

background.position =

ccp(SCREEN_WIDTH() / 2.0f, SCREEN_HEIGHT() / 2.0f);

[self addChild:background];

}

return self;

}

@end

5.2

Transição de telas

Para que o jogo comece, precisamos fazer o link entre a tela de abertura e a tela do game!

Aqui utilizaremos o CCDirector que sabe manter uma CCScene ativa por vez.

Além de trocar de uma tela para outra, o Cocos2D nos permite escolher e configurar detalhes dessa transição.

Utilizaremos o método replaceScene: que fará uma transição com o tempo

de pausa entre uma tela e outro, gerando um efeito suave.

Para isso, na classe TitleScreen, mudamos o playGame: para que botão de

play comece o jogo. Importe a GameScene na TitleScreen.h

# import "GameScene.h"

80

Casa do

Código

Capítulo 5. Tela do jogo e objetos inimigos

E mude o método playGame::

//...

- (void)playGame:(id)sender

{

NSLog(@"Botão selecionado: Play");

[[CCDirector sharedDirector]

replaceScene:[CCTransitionFade transitionWithDuration:1.0

scene:[GameScene scene]]];

}

Rode o jogo e clique no botão play. O que acontece? Por enquanto, só temos a

tela de background!

5.3

Engines

Temos a classe que orquestrará os objetos do game e criaremos agora classes res-

ponsáveis por gerenciar outros elementos. O primeiro elemento que teremos serão

os inimigos. Nossos inimigos serão meteoros que cairão e precisarão ser destruídos pelo player.

Criaremos uma nova camada, um novo layer para representar esses inimi-

gos. Como utilizado anteriormente, camadas são representadas por heranças ao

CCLayer do Cocos2D.

Engine de objetos inimigos

Nossa camada de objetos inimigos, os meteoros, será responsável por criar ini-

migos e enviar à tela do jogo. Essa engine de meteoros não é responsável pelo movimento do meteoro em si, mas sim de controlar a aparição deles na tela e fazer o link entre objeto Meteoro e tela do Game.

precisaremos manter o link entre a tela principal do game e a engine de inimigos.

Essa é uma parte complexa do desenvolvimento de games. Não é simples coordenar

objetos com ciclos de vida diferentes que rodam pela aplicação. O que faremos aqui é utilizar o Design Pattern de delegate para auxiliar na comunicação entre os objetos.

Delegates são muito utilizados em games e aplicações iOS. Você já deve ter

visto este conceito em diversas outras classes do iOS, como a UITableView e

UIScrollView por exemplo.

A engine de inimigos sabe como e quando criar os inimigos. Mas apenas isto.

81

5.3. Engines

Casa do Código

Nossa tela principal é que sabe em qual camada incluir o inimigo, além de conhecer todos os demais objetos (players, tiros etc) para poder checar a colisão entre eles.

Em nosso game, a tela principal do jogo será o delegate da engine de inimigos.

Ou seja, a tela principal do jogo será responsável por escutar e tratar as instruções da engine de inimigo. Pense da seguinte maneira: a engine de inimigos irá dizer Ei delegate! Eu quero criar o inimigo!, e a tela principal irá responder OK! Vou criar o inimigo. Deixe comigo que daqui pra frente eu cuido dele!.

É importante que uma Engine saiba quando é o momento de colocar um novo

elemento no jogo. Muitas vezes, principalmente para objetos inimigos, utilizamos

números randômicos para definir a hora de colocar um novo inimigo na tela.

Essa ideia foi muito utilizada por jogos em que o nível mais difícil era apenas uma equação na qual o número randômico gerado satisfazia uma condição de entrada em

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

0
Шрифт
Фон

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