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

Шрифт
Фон

que renderizar as atualizações do jogo a todo momento. Uma UIView desenha os

objetos em seu método drawRect:. Este método é chamado toda vez que o iOS

identificar que a nossa UIView deve ser redesenhada.

Para desenhar vamos usar as funções da CGContext, presente no framework

CoreGraphics da Apple. Com ela, conseguiremos definir elementos como textos,

linhas, figuras geométricas, cores e tudo que for referente a colocar os elementos do jogo na tela. Chamamos de context o contexto atual onde o iOS está desenhando

objetos.

Vamos começar sobrescrevendo o método

drawRect: em nossa classe

Impossible.m, e declarando uma variável para buscar o contexto atual onde es-

tão sendo desenhados os objetos:

- (void)drawRect:(CGRect)rect

{

CGContextRef context = UIGraphicsGetCurrentContext();

// desenha o player

// o que fazer aqui??? já vamos aprender

}

No momento em que sobrescrevemos o método drawRect: da UIView, temos

total controle do que iremos desenhar ou não em nossa tela.

Finalmente vamos desenhar o player! Utilizaremos nossos pincéis, no caso, as

funções do CGContext. Para não deixar o método drawRect: muito longo, vamos

criar um outro método:

- (void)drawPlayerInContext:(CGContextRef)context

{

UIGraphicsPushContext(context);

CGContextBeginPath(context);

CGContextAddArc(context,

160,

275,

25,

0,

(2 * M_PI),

YES); // Circulo de 360° (0 ~ 2pi)

22

Casa do Código

Capítulo 2. Protótipo de um jogo

CGContextSetRGBFillColor(context, 0.0f, 0.9f, 0.0f, 1.0f);

CGContextFillPath(context);

UIGraphicsPopContext();

}

Para desenhar nosso player, criamos um círculo completo e preenchemos ele

com uma cor.

Agora basta invocar o método drawPlayer de dentro do nosso drawRect.

Repare que só precisamos alterar uma única linha, a que estava com um comentário:

- (void)drawRect:(CGRect)rect

{

CGContextRef context = UIGraphicsGetCurrentContext();

[self drawPlayerInContext:context];

}

Rode novamente o seu projeto. Obtivemos nosso primeiro resultado!

23

2.4. Captando os comandos do usuário e movendo objetos

Casa do Código

Figura 2.9: Player na tela.

2.4

Captando os comandos do usuário e movendo

objetos

Existem diversas maneiras de interagir com um jogo e com o player principal. Mover o mouse e clicar, utilizar o teclado, tocar a tela ou mesmo capturar o movimento de um aparelho, usando por exemplo, o acelerômetro. No protótipo, utilizaremos o

toque na tela para mover o player. Vamos capturar cada toque como sendo um input

do usuário e, a cada vez que isso ocorrer, iremos dar um comando ao nosso jogo.

Nesse momento vamos explorar esse conceito de inputs do usuário no iOS,

e novamente reparar na importância da

UIViewController principal como

24

Casa do Código

Capítulo 2. Protótipo de um jogo

porta de entrada do jogo.

Utilizaremos um objeto do próprio iOS chamado

UITapGestureRecognizer para identificar os toques na tela. Toda vez que um

toque for detectado, o UITapGestureRecognizer chamará um método passando

as coordenadas tocadas na superfície da tela. E de posse

dessas coordenadas, podemos tomar ações sobre os objetos na tela do jogo.

Nesse momento, ao detectar um toque, moveremos para baixo nosso player. Re-

pare que aqui poderíamos utilizar a informação que recebemos para tomar ações

interessantes no jogo, como mover para um lado ou para ou outro, mover mais rá-

pido etc. Para fim de entendimento de conceito e prototipação, seremos simples

nessa implementação.

Antes de mais nada, precisamos saber em que posição nosso player está. Declare

o atributo playerY no Impossible.h:

@property (nonatomic) int playerY;

Defina também um valor inicial para ele quando nossa classe for criada, no mé-

todo init da Impossible.m:

- (id)init

{

self = [super init];

if (self) {

// Timer que executa o Game Loop (método "run") 60 vezes por segun

self.gameRunTimer = [NSTimer

scheduledTimerWithTimeInterval:1.0f/60.0f

target:self

selector:@selector(run)

userInfo:nil

repeats:YES];

// Posição inicial do jogador

self.playerY = 275;

// Variável para controlar a execução do jogo

self.running = YES;

}

return self;

}

E, toda vez que invocarem o drawPlayerInContext:, vamos desenhá-lo

nessa altura, em vez daquele número fixo. Na Impossible.m altere:

25

2.4. Captando os comandos do usuário e movendo objetos

Casa do Código

// Desenha o Player

- (void)drawPlayerInContext:(CGContextRef)context

{

UIGraphicsPushContext(context);

CGContextBeginPath(context);

CGContextAddArc(context,

160.0f,

self.playerY,

25.0f,

0,

(2 * M_PI),

YES); // Círculo de 360° (0 ~ 2pi)

CGContextSetRGBFillColor(context, 0.0f, 0.9f, 0.0f, 1.0f);

CGContextFillPath(context);

UIGraphicsPopContext();

}

Ainda na Impossible.m teremos um método que pode ser invocado para mo-

ver o player para baixo (a tela do iPhone possui a posição 0,0 no canto superior

esquerdo):

- (void)moveDown:(int)pixels

{

if (self.running == YES) {

self.playerY += pixels;

}

}

Como este será um método público que deverá ser chamado pela nossa

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

0
Шрифт
Фон

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