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

Шрифт
Фон

de jogos, pois programaremos o objeto que será controlado pelos inputs do usuário.

Para isso, utilizaremos a maioria dos elementos do framework Cocos2D que vi-

mos até agora para trabalhar com o player. Utilizaremos camadas, sprites e os conceitos vistos anteriormente.

Nossa tela de jogo precisará de mais uma camada, utilizaremos Sprites para

o Player e detectaremos inputs do usuário para movê-lo.

Resumidamente, nesse capítulo faremos:

Colocar o player na tela

Movimentar o player

E atirar!

6.1. Desenhando o Player

Casa do Código

Daremos um passo importante na construção do jogo nesse capítulo, o objetivo

final é ter a cena a seguir, ainda sem detectar colisões.

Figura 6.1: 14 bis atirando contra os meteoros.

6.1

Desenhando o Player

Iniciaremos pela imagem, adicionando a figura do player no Assets.h.

@interface Assets : NSObject

# define kNAVE

@"nave.png"

@end

94

Casa do Código

Capítulo 6. Criando o Player

Criaremos o objeto principal e, como anteriormente, controlamos figuras e ima-

gens herdando do CCSprite do Cocos2D.

Utilizaremos o método que retorna a largura da tela para centralizar o Player.

Precisamos de variáveis que guardem essas posições pois precisaremos alterá-las

mais à frente.

Como já utilizado pelas outras classes, manteremos o link entre tela de abertura

e player utilizando um delegate.

Na Player.h iremos declarar nossas propriedades de posição do player, e o

construtor.

@protocol PlayerDelegate;

@interface Player : CCSprite

@property (nonatomic, assign) id<PlayerDelegate>delegate;

@property (nonatomic, assign) float positionX;

@property (nonatomic, assign) float positionY;

+ (Player *)player;

@end

@protocol PlayerDelegate <NSObject>

// Vamos criar os métodos de delegate mais pra frente

@end

A Player.m será iniciada da seguinte maneira:

# import "Player.h"

@implementation Player

+ (Player *)player

{

Player *player = [Player spriteWithFile:kNAVE];

// Posiciona o Player recém criado

player.positionX = SCREEN_WIDTH() / 2.0f;

player.positionY = 120.0f;

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

95

6.1. Desenhando o Player

Casa do Código

return player;

}

O objeto Player já está pronto para ser inicializado, mas ainda não existe uma

camada na tela do jogo responsável por mostrá-lo. Para que o player apareça na

tela do jogo, temos que adicionar mais uma camada. Essa camada terá o nome de

playerLayer.

Na GameScene.h vamos declarar as propriedades da layer e do player, além de

informar que ela implementará o protocolo PlayerDelegate:

# import "Player.h"

//...

@interface GameScene : CCLayer <MeteorsEngineDelegate, PlayerDelegate>

//...

@property (nonatomic, retain) CCLayer *playerLayer;

@property (nonatomic, retain) Player *player;

Na GameScene.m é necessário adicionar a variável de layer e iniciá-la no cons-

trutor. Após isso, adicione a camada criada através do método addGameObjects.

- (id)init

{

self = [super init];

if (self) {

//...

// CCLayer para o Jogador

self.playerLayer = [CCLayer node];

[self addChild:self.playerLayer];

[self addGameObjects];

}

return self;

}

- (void)addGameObjects

{

// Inicializa os Arrays

self.meteorsArray = [NSMutableArray array];

96

Casa do Código

Capítulo 6. Criando o Player

// Inicializa a Engine de Meteoros

self.meteorsEngine = [MeteorsEngine meteorEngine];

// Cria o Player

self.player = [Player player];

self.player.delegate = self;

[self.playerLayer addChild:self.player];

}

Figura 6.2: 14 bis pronto para ação.

97

6.2. Botões de controle

Casa do Código

6.2

Botões de controle

Já temos o player aparecendo na tela. Além disso, ele já está em uma camada da tela do game, o que faz com que seja renderizado durante o jogo.

Vamos agora adicionar outros elementos à tela, para que o player possa ser co-

mandado pelos inputs do usuário. Para isso, precisaremos de novas imagens para

esses controles.

Iniciaremos adicionando 3 imagens, duas para movimentar o player entre di-

reita e esquerda e outra que será o botão de atirar. Essas imagens serão incluídas no arquivo Assets.h.

@interface Assets : NSObject

# define kLEFTCONTROL

@"left.png"

# define kRIGHTCONTROL @"right.png"

# define kSHOOTBUTTON

@"shootButton.png"

@end

Para os botões, poderíamos utilizar novamente a classe CCMenuItemSprite.

Entretanto, os objetos do tipo CCMenuItemSprite são ativados somente quando

o usuário retira o dedo do botão. Este comportamento é aceitável para botões de

menu, porém, para jogos o ideal é que o botão execute a ação no momento que o

usuário tocá-lo, e não após retirar o dedo.

Para isto, criaremos a classe CCMenuItemGameButton que irá sobrescrever

alguns métodos padrões da CCMenuItemSprite, a fim de que as ações dos botões

sejam executadas logo quando o botão for tocado.

Crie a classe CCMenuItemGameButton, subclasse da CCMenuItemSprite.

No arquivo header CCMenuItemGameButton.h não é necessário nenhuma al-

teração.

Vamos apenas alterar os métodos de ativação e seleção do botão na

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

0
Шрифт
Фон

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