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

Шрифт
Фон

CCMenuItemGameButton.m:

@implementation CCMenuItemGameButton

- (void)selected

{

// Quando está "selected", aciona o "activate" para disparar o botão

// antes de o jogador tirar o dedo da tela

[super activate];

}

98

Casa do Código

Capítulo 6. Criando o Player

- (void)activate

{

// Não chama mais o super "activate" aqui, já que este foi

// acionado no método "selected"

// [super activate];

}

@end

Pronto, temos nosso botão customizado criado. Agora vamos incluir os botões

na tela alterando a classe GameScene. Vamos importar a classe de botões e definir sua camada, a declarando na GameScene.h:

# import "CCMenuItemGameButton.h"

//...

@property (nonatomic, retain) CCLayer *gameButtonsLayer;

No arquivo de implementação GameScene.m, vamos instanciar a camada

dos botões e criar o menu.

Perceba que os botões serão criados da mesma

forma que fizemos na TitleScreen, mas desta vez utilizaremos nossa classe

CCMenuItemGameButton:

- (id)init

{

self = [super init];

if (self) {

//...

// CCLayer para os Botões

self.gameButtonsLayer = [CCLayer node];

[self addChild:self.gameButtonsLayer];

// Cria os botões

CCMenuItemGameButton *leftControl = [CCMenuItemGameButton

itemWithNormalSprite:[CCSprite spriteWithFile:kLEFTCONTROL]

selectedSprite:[CCSprite spriteWithFile:kLEFTCONTROL]

target:self

selector:@selector(moveLeft:)];

CCMenuItemGameButton *rightControl = [CCMenuItemGameButton

itemWithNormalSprite:[CCSprite spriteWithFile:kRIGHTCONTROL]

selectedSprite:[CCSprite spriteWithFile:kRIGHTCONTROL]

target:self

99

6.2. Botões de controle

Casa do Código

selector:@selector(moveRight:)];

CCMenuItemGameButton *shootButton = [CCMenuItemGameButton

itemWithNormalSprite:[CCSprite spriteWithFile:kSHOOTBUTTON]

selectedSprite:[CCSprite spriteWithFile:kSHOOTBUTTON]

target:self

selector:@selector(shoot:)];

// Define as posições dos botões

leftControl.position = ccp(-110.0f,

(SCREEN_HEIGHT() / -2.0f) + 50.0f);

rightControl.position = ccp(-50.0f,

(SCREEN_HEIGHT() / -2.0f) + 50.0f);

shootButton.position = ccp((SCREEN_WIDTH() / 2.0f) - 50.0f,

(SCREEN_HEIGHT() / -2.0f) + 50.0f);

// Cria o menu que terá os botões

CCMenu *menu = [CCMenu menuWithItems:leftControl,

rightControl,

shootButton,

nil];

[self.gameButtonsLayer addChild:menu];

[self addGameObjects];

}

return self;

}

Por fim, é necessário criar os métodos que receberão os inputs dos botões:

- (void)moveLeft:(id)sender

{

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

}

- (void)moveRight:(id)sender

{

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

}

- (void)shoot:(id)sender

{

100

Casa do Código

Capítulo 6. Criando o Player

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

}

Rode o jogo e aperte os botões. Veja que eles respondem logo quando você os

toca, e não quando retira o dedo da tela!

Figura 6.3: Controles de direção e tiro.

Imagens posicionadas e preparadas. Hora de começar a ação!

6.3

Atirando

Falaremos agora de uma parte do jogo que pode parecer simples a princípio, mas

tem impacto em muitas outras partes para que funcione: o tiro! Para que a nave

101

6.3. Atirando

Casa do Código

atire, precisaremos de uma série de coisas, portanto, vamos primeiro listar o que será necessário para organizar o pensamento antes de ir para o código.

Um novo asset, ou seja, imagem do tiro

Uma classe que represente o tiro como um CCSprite

Definir o posicionamento do tiro na tela

Uma engine responsável por criar um tiro

Uma camada na tela do jogo para os tiros

Associar o tiro e o player, para que o tiro saia do player

Há muita coisa para que o tiro de fato aconteça, porém, se listarmos cada uma

dessas dependências podemos simplificar o desenvolvimento. Iniciaremos adicio-

nando a figura do tiro na classe Assets.h.

@interface Assets : NSObject

# define kSHOOTBUTTON

@"shootButton.png"

@end

Podemos iniciar a programação do tiro. Antes de pensar em fazer a nave atirar

ou algo assim, vamos tentar pensar em o que é o tiro?. O tiro é um sprite, ou seja, uma imagem, que anda pela tela de baixo para cima. Assim, uma vez que um tiro

aparece na tela, precisamos movimentá-lo para cima com o passar do tempo.

Para gerar essa sensação de movimento e controlar esses updates do posiciona-

mento do tiro no eixo vertical, criaremos um método com o nome update:. Esse

método será executado pelo Cocos2D a cada iteração. O framework manda como

parâmetro um tempo de execução, para que possa ser analisado se algo deve ou não

ser executado desde a última vez que ele invocou esse método. No nosso caso, esse parâmetro não será utilizado, pois a lógica do tiro é pelo toque no botão e não por uma regra de tempo.

A classe de tiro precisa manter o link com a tela de jogo, então utilizaremos o

delegate. Criaremos também um método chamado start, que será utilizado para

indicar que o tiro está funcionando.

Declare as propriedades e métodos na Shoot.h:

102

Casa do Código

Capítulo 6. Criando o Player

@interface Shoot : CCSprite

@property (nonatomic, assign) float positionX;

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

0
Шрифт
Фон

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