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

Шрифт
Фон

@property (nonatomic, assign) float positionY;

+ (Shoot *)shootWithPositionX:(float)positionX

andPositionY:(float)positionY;

- (void)start;

@end

Vamos implementar os métodos na Shoot.m:

@implementation Shoot

+ (Shoot *)shootWithPositionX:(float)positionX

andPositionY:(float)positionY

{

Shoot *shoot = [Shoot spriteWithFile:kSHOOT];

// Posiciona o Tiro recém criado no ponto indicado

shoot.positionX = positionX;

shoot.positionY = positionY;

shoot.position

= ccp(shoot.positionX, shoot.positionY);

return shoot;

}

- (void)start

{

// Inicia a Animação / Movimentação do Tiro

[self scheduleUpdate];

}

- (void)update:(float)dt

{

// Move o Tiro para cima

self.positionY += 2;

self.position = ccp(self.positionX, self.positionY);

}

103

6.3. Atirando

Casa do Código

@end

Tiro e tela de jogo

Até aqui, a classe de tiro foi definida. Agora vamos à tela do jogo para adicionar esse novo elemento. Duas coisas são necessárias nesse momento. A primeira é a camada do Cocos2D para que os tiros apareçam. A segunda é um NSMutableArray

que guardará os tiros para que possamos detectar a colisão com os meteoros. Altere a GameScene.h:

# import "Shoot.h"

//...

@property (nonatomic, retain) CCLayer *shootsLayer;

@property (nonatomic, retain) NSMutableArray *shootsArray;

Além de criar as propriedade, é necessário inicializá-las. No construtor criare-

mos a camada.

- (id)init

{

self = [super init];

if (self) {

//...

// CCLayer para os Tiros

self.shootsLayer = [CCLayer node];

[self addChild:self.shootsLayer];

}

return self;

}

E no método addGameObjects criaremos o array.

- (void)addGameObjects

{

//...

self.shootsArray = [NSMutableArray array];

//...

}

104

Casa do Código

Capítulo 6. Criando o Player

Atirando!

Já temos a classe do tiro e também a preparação na tela de jogo para o link entre esses dois objetos. O que fizemos até aqui foi preparar a estrutura para que o tiro aconteça. Vamos nos concentrar agora na relação entre o tiro e o Player.

Nesse momento, iremos definir o método que o player notificará o delegate de

que ele está atirando. Inclua o método no PlayerDelegate da Player.h:

# import "Shoot.h"

//...

@protocol PlayerDelegate <NSObject>

- (void)playerDidCreateShoot:(Shoot *)shoot;

@end

Nesse

momento,

implementaremos

a

interface

PlayerDelegate

na

GameScene.

Dessa forma, a tela de jogo saberá o que deve fazer

quando for requisitada para atirar.

A interface obriga a criação do método

playerDidCreateShoot:. Nele, um novo tiro, que é recebido como parâmetro,

é adicionado à camada e ao array de tiros. Além disso, chama o método start da

classe Shoot, permitindo que ela controle o que for necessário lá dentro.

Primeiramente, implemente o método

playerDidCreateShoot:

na

GameScene.m

- (void)playerDidCreateShoot:(Shoot *)shoot

{

// O Player indicou que um novo Tiro foi criado

[self.shootsLayer addChild:shoot];

[shoot start];

[self.shootsArray addObject:shoot];

}

Criaremos na classe Player um método chamado shoot para disparar os ti-

ros. Precisamos disso por um fato muito importante, que é o posicionamento inicial do tiro. Lembre-se que o tiro deve sair da nave, portanto o Player e seu posicionamento são muito importantes. O método shoot conterá todas as variáveis de

posicionamento da nave na hora do tiro.

Declare o método na Player.h:

- (void)shoot;

Implemente o código de tiro na Player.m:

105

6.3. Atirando

Casa do Código

- (void)shoot

{

// Aqui será disparado o tiro!

}

Apertando o botão!

A GameScene.m é quem tem o menu de botões e recebe o input do usuário, ou

seja, o momento em que o botão é pressionado, e consequentemente o tiro disparado.

Vamos alterar o método shoot:, disparado pelo botão de tiro, para chamar o

método de atirar do Player:

- (void)shoot:(id)sender

{

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

[self.player shoot];

}

Player atirando

Tudo pronto para atirar a partir do botão de tiro pressionado! Temos a classe de

tiro definida, o botão de tiro programado e a tela de jogo com a camada e métodos necessários prontos. Precisamos que alguém dê o comando de atirar e nada melhor

que o próprio Player para fazer isso! Vamos alterar o método shoot da Player.m

para que capture o posicionamento da nave e chame seu delegate para

criação do tiro.

Bang!

- (void)shoot

{

// Atira

if ([self.delegate respondsToSelector:

@selector(playerDidCreateShoot:)]) {

[self.delegate playerDidCreateShoot:

[Shoot shootWithPositionX:self.positionX

andPositionY:self.positionY]];

}

}

106

Casa do Código

Capítulo 6. Criando o Player

Figura 6.4: Player atirando.

6.4

Movendo o player

Vamos fechar esse capítulo com uma das partes mais importantes do jogo. Após

atirar, moveremos o Player para esquerda e direita. Utilizaremos a mesma estratégia de atirar, mas agora as coisas serão mais simples.

Para iniciar, o Player deve saber se mover. Movimentar o player é fazer com

que sua posição X seja atualizada quando um evento for detectado.

Na classe Player adicionaremos dois novos métodos, que quando chamados,

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

0
Шрифт
Фон

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