Aprenda a Desenvolver Jogos para iPhone e iPad … · Steffen Itterheim Aprenda a Desenvolver Jogos...

34
Steffen Itterheim Aprenda a Desenvolver Jogos para iPhone e iPad com o cocos2d Tradução: Angelo Giuseppe Meira Costa (angico)

Transcript of Aprenda a Desenvolver Jogos para iPhone e iPad … · Steffen Itterheim Aprenda a Desenvolver Jogos...

Steffen Itterheim

Aprenda a Desenvolver Jogos para iPhone e iPad com o cocos2d

Tradução: Angelo Giuseppe Meira Costa (angico)

Do original:Learn iPhone and iPad cocos2d Game Development

Original English language edition published by Apress Inc., Copyright© 2010 by Apress, Inc.. Portuguese-language edition for Brazil Copyright © 2012 by Editora Ciência Moderna. All rights reserved.

Nenhuma parte deste livro poderá ser reproduzida, transmitida e gravada, por qualquer meio eletrônico, mecânico, por fotocópia e outros, sem a prévia autorização, por escrito, da Editora.

Editor: Paulo André P. MarquesSupervisão Editorial: Aline Vieira MarquesDiagramação: Andréa Dias FiãesTradução: Angelo Giuseppe Mei�a Costa (angico)Capa: Carlos Arthur Candal (baseada no original)Assistente Editorial: Laura Santos Souza

Várias Marcas Registradas aparecem no decorrer deste livro. Mais do que simplesmente listar esses nomes e informar quem possui seus direitos de exploração, ou ainda imprimir os logotipos das mesmas, o editor declara estar utilizando tais nomes apenas para � ns editoriais, em benefício exclusivo do dono da Marca Registrada, sem intenção de infringir as regras de sua utilização.

FICHA CATALOGRÁFICA

ITTERHEIM, SteffenAprenda a Desenvolver Jogos para iPhone e iPad com o cocos2dRio de Janeiro: Editora Ciência Moderna Ltda., 2011

1. Linguagem de Programação.I — Título

ISBN: 978-85-399-0196-8 CDD 005.133

Editora Ciência Moderna Ltda.R. Alice Figueiredo, 46 – Riachuelo Rio de Janeiro, RJ – Brasil CEP: 20.950-150Tel: (21) 2201-6662/ Fax: (21) [email protected] 01/12

Conteúdo resumidoConteúdo ............................................................................................. vSobre o autor ...................................................................................... xvSobre o revisor técnico ...................................................................... xviiDedicatória ....................................................................................... xixAgradecimentos ................................................................................ xxiPrefácio .......................................................................................... xxiiiCapítulo 1: Introdução ......................................................................... 1Capítulo 2: Começando ...................................................................... 17Capítulo 3: Essencialidades ............................................................... 53Capítulo 4: Seu primeiro jogo ............................................................. 91Capítulo 5: Blocos de construção de jogos......................................... 131Capítulo 6: Sprites em profundidade ................................................. 169Capítulo 7: Rolagem com alegria ...................................................... 205Capítulo 8: Atire neles ...................................................................... 241Capítulo 9: Efeitos de partículas ....................................................... 277Capítulo 10: Trabalhando com mapas de ladrilhos ............................. 311Capítulo 11: Mapas de ladrilhos isométricos ..................................... 347Capítulo 12: Mecanismos de física ................................................... 385Capítulo 13: O Jogo de Pinball .......................................................... 423Capítulo 14: O Game Center ............................................................ 467Capítulo 15:Fora de série ..................................................................519Índice remissivo................................................................................547

ConteúdoCapítulo 1: Introdução ................................................................ 1

Por que usar o cocos2d para iPhone? ............................................................... 2Ele é gratuito ............................................................................................. 2Ele é de código aberto ................................................................................ 3Ele é objetivo, vê? ....................................................................................... 3Ele é 2D ..................................................................................................... 4Ele tem física ............................................................................................. 4Ele é menos técnico ................................................................................... 4Ele ainda é programação ............................................................................ 5Ele tem uma ótima comunidade .................................................................. 5

Importantes seleções do cocos2d .................................................................... 6Seção 3.3.1 ............................................................................................... 6Portando para outras plataformas............................................................... 7

Este livro é para você ....................................................................................... 8

Pré-requisitos ................................................................................................. 8Experiência de programação ....................................................................... 8Objective-C ................................................................................................ 8

O que você irá aprender ................................................................................... 9O que os desenvolvedores principiantes do iOS vão aprender ...................... 10O que os desenvolvedores de aplicativos do iPhone vão aprender .................11O que os desenvolvedores cocos2d vão aprender ........................................ 12

O que há neste livro ....................................................................................... 12Capítulo 2 – Começando ........................................................................... 12

vi Aprenda a Desenvolver Jogos para iPhone e iPad com o cocos2d

Capítulo 3 – Fundamentos ........................................................................ 13Capítulo 4 – Seu primeiro jogo .................................................................. 13Capítulo 5 – Blocos de construção de jogos ............................................... 13Capítulo 6 – Sprites em profundidade ........................................................ 13Capítulo 7 – Rolagem com alegria ............................................................. 13Capítulo 8 – Atire neles ............................................................................. 13Capítulo 9 – Efeitos de partículas .............................................................. 14Capítulo 10 – Trabalhando com Tilemaps ................................................... 14Capítulo 11 – Tilemaps isométricos ........................................................... 14Capítulo 12 – Mecanismos de física .......................................................... 14Capítulo 13 – Jogo de pinball .................................................................... 14Capítulo 14 – Centro de jogos ................................................................... 14Capítulo 15 – Conclusão ........................................................................... 15

Questões & Feedback .................................................................................... 15

Capítulo 2: Começando ............................................................. 17

O que você precisa para começar ....................................................................17Requisitos do sistema ...............................................................................17Registre-se como desenvolvedor do iOS ..................................................... 18Certi� cados & per� s de provisionamento .................................................. 18Baixe & instale o iPhone SDK .................................................................... 19Baixe & instale o cocos2d ......................................................................... 20Instale os gabaritos de projeto Xcode do cocos2d ...................................... 20Crie uma aplicação cocos2d ......................................................................21

A aplicação HelloWorld .................................................................................. 26Localizando os arquivos do HelloWorld ...................................................... 26Recursos ................................................................................................. 28Outras fontes ........................................................................................... 28Main.m .................................................................................................... 28Cabeçalho de pre� xo precompilado ........................................................... 29Classes ................................................................................................... 30HelloWorldAppDelegate............................................................................ 30Orientação do dispositivo ......................................................................... 32Intervalo de animação .............................................................................. 32Exibição do FPS ........................................................................................ 33

HelloWorldScene ........................................................................................... 34

Conteúdo vii

Gerenciamento de memória com o cocos2d .................................................... 36

Mudando o mundo ..........................................................................................41

O que mais você deve saber ............................................................................ 44Os dispositivos iOS ................................................................................... 44Sobre o uso de memória ............................................................................ 46O simulador ............................................................................................. 49Não é possível estimar o desempenho........................................................ 49Não é possível estimar o uso de memória ................................................... 50Não é possível usar todas as funcionalidades dos dispositivos iOS............... 50O comportamento em tempo de execução pode diferir ................................ 50Sobre registro ...........................................................................................51

Conclusão ......................................................................................................51

Capítulo 3: Essencialidades ....................................................... 53

Singularidades no cocos2d ............................................................................ 53

O diretor ....................................................................................................... 56

O grá� co da cena .......................................................................................... 56

A hierarquia de classes de CCNode ................................................................. 58

CCNode ........................................................................................................ 58Trabalhando com nós................................................................................ 59Trabalhando com ações ............................................................................ 60Mensagens agendadas ............................................................................. 61

Cenas e camadas .......................................................................................... 66CCScene ................................................................................................. 67Cenas e memória ..................................................................................... 68Inserindo e retirando cenas ...................................................................... 69CCTransitionScene ................................................................................... 70

CCLayer ........................................................................................................ 72Recebendo eventos de toque .....................................................................74Recebendo eventos do acelerômetro ......................................................... 77

CCSprite ....................................................................................................... 77

Pontos de ancoragem desmisti� cados ............................................................ 78

Dimensões de texturas ................................................................................... 79

viii Aprenda a Desenvolver Jogos para iPhone e iPad com o cocos2d

CCLabel ........................................................................................................ 80

Menus .......................................................................................................... 82

Ações ........................................................................................................... 85Ações repetitivas...................................................................................... 85Ações de facilidade .................................................................................. 86Sequências de ações ................................................................................ 87Ações instantâneas .................................................................................. 88

Casos de teste do cocos2d ............................................................................. 90

Conclusão ..................................................................................................... 90

Capítulo 4: Seu primeiro jogo ..................................................... 91

Con� guração do projeto passo a passo ........................................................... 92

Adicionando o sprite do jogador ..................................................................... 98

Entrada de acelerômetro ............................................................................. 103

Primeira execução de teste .......................................................................... 104

Velocidade do jogador.................................................................................. 104

Adicionando obstáculos ............................................................................... 109

Detecção de colisões ................................................................................... 120

Etiqueta de placar ........................................................................................121

Apresentando CCBitmapFontAtlas e Hiero .................................................... 123

Adicionando áudio ....................................................................................... 126

Portando para o iPad ................................................................................... 128

Conclusão ................................................................................................... 130

Capítulo 5: Blocos de construção de jogos ................................ 131

Trabalhando com múltiplas cenas..................................................................131Adicionando mais cenas ......................................................................... 132Carregando o próximo parágrafo - Aguarde, por favor ............................... 134

Trabalhando com múltiplas camadas ............................................................ 139

Conteúdo ix

Como implementar níveis da melhor forma possível ....................................... 148Cenas como níveis .................................................................................. 148Camadas como níveis ............................................................................. 149

CCColorLayer .............................................................................................. 150

Derivando de CCSprite subclasses de objetos de jogo .....................................151

Compondo objetos de jogo usando CCSprite.................................................. 153

Classes CCNode curiosamente interessantes .................................................161CCProgressTimer ....................................................................................161CCParallaxNode ..................................................................................... 162CCRibbon .............................................................................................. 165CCMotionStreak .................................................................................... 167

Conclusão ................................................................................................... 168

Capítulo 6: Sprites em profundidade ........................................ 169

CCSpriteBatchNode .....................................................................................170Quando usar o CCSpriteBatchNode ..........................................................172Projetos Demos .......................................................................................172Um erro comum e fatal ............................................................................173Balas sem um SpriteBatch .......................................................................174Apresentando o CCSpriteBatchNode ........................................................176Otimizações ............................................................................................178

Animações de sprites do jeito difícil ...............................................................181

Categoria auxiliar de animação .................................................................... 184

Trabalhando com Atlas de Texturas ............................................................... 188O que é um Atlas de Texturas? ................................................................. 188Apresentando o Zwoptex ......................................................................... 189Criando um Atlas de Texturas com o Zwoptex de área de trabalho .............. 190Usando o Atlas de Texturas com o cocos2d............................................... 195Atualizando a categoria auxiliar CCAnimation .......................................... 198Todos em um e um por todos ................................................................... 200

Faça você mesmo .........................................................................................201

Conclusão ................................................................................................... 203

x Aprenda a Desenvolver Jogos para iPhone e iPad com o cocos2d

Capítulo 7: Rolagem com alegria .............................................. 205

Rolagem de paralaxe avançada .................................................................... 205Criando o plano de fundo como listras ..................................................... 206Recriando o plano de fundo em código ..................................................... 209Movendo o ParallaxBackground ...............................................................212Fatores de Velocidade de Paralaxe ...........................................................214Rolando até o in� nito e além ....................................................................217Corrigindo a piscada .............................................................................. 220Repetir, repetir, repetir ........................................................................... 222

Um joypad virtual ......................................................................................... 223Apresentando o SneakyInput .................................................................. 224Integrando o SneakyInput ....................................................................... 225Toque no botão para atirar ...................................................................... 227Vestindo o botão .................................................................................... 230Controlando a ação ................................................................................ 233Controles digitais ................................................................................... 238Uma alternativa: GPJoystick .................................................................... 239

Conclusão ................................................................................................... 239

Capítulo 8: Atire neles ............................................................. 241

Adicionando a classe BulletCache .................................................................241

E quanto aos inimigos? ................................................................................ 248

A hierarquia da classe Entity .........................................................................251A classe EnemyEntity .............................................................................. 252A classe EnemyCache ............................................................................. 258As classes de componentes .................................................................... 264

Atirando...................................................................................................... 268

Uma barra de saúde para o chefe ..................................................................271

Conclusão ....................................................................................................276

Capítulo 9: Efeitos de partículas .............................................. 277

Exemplos de efeitos de partículas .................................................................277

Conteúdo xi

Criando um efeito de partículas do jeito difícil............................................... 282Propriedades de variância ...................................................................... 287Número de partículas ............................................................................. 288Duração do emissor ................................................................................ 289Modos do emissor .................................................................................. 289Modo do emissor: gravidade ................................................................... 290Modo do emissor: raio .............................................................................291Posição das partículas ........................................................................... 293Tamanho das partículas .......................................................................... 294Direção das partículas ........................................................................... 294Tempo de vida das partículas .................................................................. 294Cor das partículas .................................................................................. 295Modo de mistura de partículas ................................................................ 296Textura das partículas ............................................................................ 298

Apresentando o Particle Designer................................................................. 298Usando efeitos do Particle Designer .........................................................301Compartilhando efeitos de partículas ...................................................... 304

O jogo do atirador com efeitos de partículas .................................................. 306

Conclusão ................................................................................................... 309

Capítulo 10: Trabalhando com mapas de ladrilhos ..................... 311

Que é um mapa de ladrilhos? ........................................................................312

Preparando imagens com o Zwoptex ..............................................................316O Tiled Map Editor ...................................................................................318Criando um novo mapa de ladrilhos ..........................................................318Desenhando um mapa de ladrilhos ...........................................................321

Usando mapas de ladrilhos ortogonais com o cocos2d ................................... 325Localizando ladrilhos tocados ................................................................. 330Um exercício de otimização e legibilidade ................................................ 335Trabalhando com a camada de objetos .................................................... 335Desenhando os retângulos da camada de objetos .................................... 338Rolando o mapa de ladrilhos ................................................................... 342

Conclusão ................................................................................................... 345

xii Aprenda a Desenvolver Jogos para iPhone e iPad com o cocos2d

Capítulo 11: Mapas de ladrilhos isométricos............................. 347

Desenhando grá� cos de ladrilhos isométricos ............................................... 348

Edição de mapas de ladrilhos isométricos no Tiled ......................................... 352Criando um novo mapa de ladrilhos isométrico ......................................... 352Criando um novo mosaico isométrico ....................................................... 354De� nindo algumas regras básicas ........................................................... 355

Programação de jogos isométricos ................................................................357

Carregando o mapa de ladrilhos isométrico no cocos2d ..................................357Con� gurando o cocos2d para mapas de ladrilhos isométricos ................... 358Localizando um ladrilho isométrico ......................................................... 361Rolando o mapa de ladrilhos isométrico................................................... 364Este mundo merece um � nal melhor ........................................................ 366Adicionando um personagem móvel de jogador ........................................ 369Habilitando a movimentação do jogador por trás dos ladrilhos ...................371Movendo o jogador, ladrilho a ladrilho ..................................................... 373

Parando o jogador nas colisões .................................................................... 379

Adicionando mais conteúdo ao jogo .............................................................. 382

Conclusão ................................................................................................... 383

Capítulo 12: Mecanismo de física ............................................ 385

Conceitos básicos dos mecanismos de física ................................................ 385

Limitações dos mecanismos de física .......................................................... 387

O confronto: Box2D versus Chipmunk ........................................................... 387

O Box2D ..................................................................................................... 389O mundo de acordo com o Box2D ............................................................ 390Restringindo o movimento à tela ............................................................. 393Convertendo pontos ............................................................................... 396Adicionando caixas ao mundo do Box2D .................................................. 397Conectando sprites a corpos ................................................................... 399Detecção de colisões ..............................................................................401Joint venture – junções aventureiras ........................................................ 405

O Chipmunk ................................................................................................ 407O Chipmunk objeti� cado ........................................................................ 407Chipmunks no espaço ............................................................................ 408

Conteúdo xiii

Encaixotando as caixas ...........................................................................410Adicionando caixinhas .............................................................................412Atualizando os sprites das caixas .............................................................415Um curso de colisões no Chipmunk ..........................................................417Junções para Chipmunks ....................................................................... 420

Conclusão .................................................................................................. 422

Capítulo 13: O Jogo de Pinball .................................................. 423

Formas: convexas e anti-horárias ................................................................. 424

Trabalhando com o VertexHelper .................................................................. 425

Criando a mesa de pinball ............................................................................ 428Desenho de depuração do Box2D ............................................................ 437

Adicionando elementos dinâmicos ............................................................... 438A classe BodyNode ................................................................................. 439A bola .................................................................................................... 444Criando a bola (novamente) ................................................................... 445Forçando a bola a se mover ..................................................................... 448Os rebatedores .......................................................................................451O lançador ............................................................................................ 453Lançando a bola no contato .....................................................................457Os batedores ......................................................................................... 459

Conclusão ................................................................................................... 465

Capítulo 14: O Game Center .................................................... 467

Habilitando o Game Center ......................................................................... 467Criando sua aplicação no iTunes Connect ............................................... 469Con� gurando quadros de campeões e de feitos ........................................470Criando um projeto Xcode do cocos2d ......................................................471Con� gurando o projeto Xcode ..................................................................472Resumo ..................................................................................................477

Programação para o Game Kit .......................................................................478O delegado GameKitHelper ......................................................................478Checando a disponibilidade do Game Center ............................................481Autenticando o jogador local .................................................................. 482Objetos blocos ....................................................................................... 487Recebendo a lista de amigos do jogador local .......................................... 490

xiv Aprenda a Desenvolver Jogos para iPhone e iPad com o cocos2d

Quadros de campeões ............................................................................ 493Feitos ....................................................................................................501

Competições ............................................................................................... 509

Conclusão ...................................................................................................516

Capítulo 15: Fora de série ........................................................ 519

Tecnologias úteis ........................................................................................ 520Redes sociais ......................................................................................... 520Tecnologia de servidor de soquetes ......................................................... 522Propaganda e análises ........................................................................... 524Provedores de noti� cação por push ......................................................... 525

Projetos de código fonte dos quais se bene� ciar ........................................... 525Código fonte do Sapus Tongue ................................................................ 526O LevelSVG ............................................................................................ 527O iPhone RPG Game Kit .......................................................................... 527O Line-Drawing Game Starterkit .............................................................. 528

Para sua consulta ........................................................................................ 529

Trabalhando com editores .............................................................................531

Encontrando freelancers ............................................................................. 534

Encontrando artes e áudio gratuitos ............................................................. 534

Encontrando as ferramentas ........................................................................ 536

Marketing .................................................................................................. 536Fazendo o marketing de seu jogo e de você mesmo ................................... 537Relações públicas e Press Releases ....................................................... 540

Onde encontrar ajuda .................................................................................. 542A página base do cocos2d ...................................................................... 542A rede Stack Exchange ........................................................................... 543Tutoriais e FAQs ..................................................................................... 544

As famosas palavras � nais ........................................................................... 545

Conclusão .................................................................................................. 546

Índice Remissivo ..................................................................... 547

Sobre o autorSteffen Itterheim tem sido entusiasta do desenvolvimento de jogos desde princípios dos anos 1990. Seu trabalho nas comunidades do Doom e do Duke Nukem 3D lhe forneceram seu primeiro trabalho freelance como tes-tador beta do 3D Realms. Ele é desenvolvedor profissional de jogos há bem mais de dez anos, tendo trabalhado a maior parte de sua carreira como programador de jogos e ferramentas para a Electronic Arts Phenomic. Seu primeiro contato com o cocos2d se deu em 2009, quando ele foi cofun-dador de uma ambiciosa companhia de jogos para o iOS, chamada Fun Armada. Ele adora ensinar e habilitar outros desenvolvedores de jogos para que eles possam trabalhar com mais esperteza, não com mais difi-culdades. Ocasionalmente, você o encontrará passeando por opulentos vinhedos próximos de seu domicílio, durante o dia, e no deserto de Ne-vada, à noite, coletando tampinhas de garrafas.

Sobre o revisor técnicoBoon Chew é diretor gerente da Nanaimo Studio, um estúdio de jogos com matriz em Seattle e Shanghai que é especializada em jogos móveis e para web. Ele tem extensa experiência no desenvolvimento de jogos e de média interativa, tendo já trabalhado para companhias como a Vivendi Universal, Amazon, Microsoft, e vários estúdios de jogos e agências de propaganda. Sua paixão é a construção de coisas e o trabalho com pessoas bacanas. Você pode chegar até ele através de [email protected].

Para Gabi, a única formiga espacial.Às vezes alien, frequentemente impaciente, sempre amada.

AgradecimentosEsta é a parte do livro que me deixa um pouco ansioso. Eu não quero esquecer de ninguém que tenha sido útil na criação deste livro, embo-ra eu saiba que não posso mencionar cada um e todos vocês. Se você não for mencionado aqui, isso não significa que não sou grato por sua contribuição!Dê-me uma caneta e eu escreverei seu nome logo aqui, na sua cópia do livro, e sinceramente me desculpo por não tê-lo menciona-do inicialmente.

Meus primeiros agradecimentos vão para você, caro leitor. Sem você, este livro não teria nenhum sentido. Sem saber que você pode lê-lo e desfrutar dele, e, espero, aprender com ele, eu provavelmente nem teria pensado em escrevê-lo. Eu recebi valiosas ideias e solicitações de leitores do meu blog e de outras pessoas que encontrei ou que me enviaram cor-respondência durante o curso deste livro. Obrigado a todos vocês!

Agora, seguem as pessoas que ajudaram na escrita deste livro, na ordem em que as encontrei.

Meus primeiros agradecimentos vão para Jack Nutting, que pôs a ideia de escrever um livro sobre o cocos2d na minha cabeça. Sou grato por ele não ter me enganar com relação à quantidade de trabalho necessário para se escrever um livro, de forma que eu não estivesse despreparado.

Clay Andres, tenho de agradecer por ser tão gentil, cujas dicas com re-lação às propostas de meus capítulos foram valiosas e concisas. Ele me

xxii Aprenda a Desenvolver Jogos para iPhone e iPad com o cocos2d

ajudou a dar forma à ideia do que o livro se tornaria, e é em geral uma pessoa agradável de se conversar. Clay, espero que a tempestade não inunde sua casa.

Muito obrigado a Kelly Moritz, editora coordenadora, que, embora in-crivelmente ocupada, sempre encontrou tempo e paciência para respon-der minhas perguntas e acompanhar minhas solicitações. Quando o caos se estabelecia, era ela que punha tudo de volta à ordem, e fazia com que as coisas acontecessem.

Grande quantidade de feedback e sugestões que eu recebi de Brian MacDonald, o editor de desenvolvimento para o livro, e Boon Chew, o revisor técnico. Eles me fizeram ir ainda mais além. Brian me ajudou a entender muitas das complexidades de se escrever um livro, ao mesmo tempo que Boon me apontou muitas incorreções técnicas e explicações adicionais necessárias. Muito obrigado a ambos.

Muito obrigado aos editores de cópias, Sharon Terdeman e Damon Larson. Sem vocês, o texto do livro estaria cheio de erros de sintaxe e de avisos de compilador, para falar em termos de programadores. Sharon, quando você disse que meus capítulos eram sempre trabalho fácil, eu realmente não acreditei em você, muito embora eu soubesse que você era a perita. E Damon, obrigado por se colocar na posição de leitor e sugerir que todos aqueles parágrafos confusos fossem refeitos.

Também quero agradecer a Bernie Watkins, que gerenciou o feedback da Alpha Book e meus contratos. Obrigado também a Chris Guillebeau por ser um blogueiro inspirador de destaque e um modelo.

É claro que meus amigos e familiares tiveram alguma parte na escrita deste livro, tanto através de feedback quanto de pura e simples paciência em lidarem com minhas expansões de escrita. Muito obrigado!

PrefácioEm maio de 2009, eu fiz um primeiro contato. Pela primeira vez na minha vida, eu me sujeitei à plataforma Mac OS e comecei a aprender Xcode, Objective-C, e cocos2d. Mesmo para um desenvolvedor experiente, isso foi uma luta. Foi nessa época que entendi que o cocos2d era bom, mas que lhe faltava documentação, tutoriais, e artigos de how-to (como fa-zer) – especialmente quando comparado com outras tecnologias que eu estava aprendendo na época.

Passa-se um ano, até maio de 2010. Eu completei quatro projetos do cocos2d. Meu Objective-C e meu cocos2d se tornaram fluentes. Doe-me ver como outros desenvolvedores ainda estavam lutando com as mesmas questões básicas e caindo vítimas dos mesmos equívocos que eu, um ano antes. A documentação do cocos2d ainda era muito precária.

Eu sabia que outros desenvolvedores que estavam usando o cocos2d es-tavam tendo grande sucesso em atrair leitores para seus blogs, escreven-do tutoriais e compartilhando o que sabiam sobre o cocos2d. Até hoje, a maior parte da documentação do cocos2d está sendo ativamente criada de uma forma descentralizada, por outros desenvolvedores. Eu vi uma necessidade de um website para canalizar toda a informação que estava espalhada por tantos websites diferentes.

Eu criei o website www.learn-cocos2d.com para compartilhar o que sa-bia sobre o cocos2d e o desenvolvimento de jogos, para escrever tuto-

xxiv Aprenda a Desenvolver Jogos para iPhone e iPad com o cocos2d

riais e FAQs, e para redirecionar os leitores interessados no cocos2d para todas as importantes fontes de informação. Por outro lado, eu estaria vendendo produtos relacionados com o cocos2d, na esperança de que isso possa, um dia, me levar para perto do objetivo último de me tornar financeiramente independente. O modelo de negócio tinha se provado eficiente através de muitos exemplos brilhantes. E eu gosto de ajudar os outros, tendo sido o cara de referência em todas as companhias em que trabalhei. Eu sabia que poderia tornar o website uma vitória para todos. E estava empolgado.

Desde o primeiro dia, o website foi um sucesso – além das minhas mais especulativas ideias. Então, dentro de 24 horas com o website no ar, Jack Nutting me perguntou se eu havia considerado a possibilidade de escrever um livro sobre o cocos2d. O resto é história, e o resultado é o livro que você está lendo agora.

Eu peguei tudo que tinha em mente para o website e coloquei no liro. Mas só isso teria dado talvez um quarto do livro, no máximo. Espero que os quatro meses que levei para escrever em tempo integral o livro se paguem por ser capaz de oferecer um nível de detalhes sem precedentes sobre como o cocos2d funciona, e sobre como trabalhar com o cocos2d.

Eu aprendi muito, no processo, incluindo muitas coisas que eu nem es-perava saber, por mais estranho que possa parecer. E não desejo nada mais do que você aprender muito sobre o cocos2d e o desenvolvimento de jogos com este livro.

Capítulo 1

IntroduçãoAcaso você já se imaginou escrevendo um jogo para computador e sendo capaz de ganhar dinheiro vendendo-o? Com a iTunes App Store da Apple, e os dispositivos móveis acompanhantes, iPhone, iPod Touch e iPad, isso agora é mais fácil do que nunca. É claro que isso não significa que a coisa é fácil – ainda há muito a se aprender sobre o desenvolvimento e a programa-ção de jogos. Mas você está lendo este livro, então eu acredito que você já fez a cabeça para pegar esta estrada. E você escolheu um dos mecanismos de jogos mais interessantes com que se trabalhar: o cocos2d para iPhone.

Desenvolvedores que usam o cocos2d têm uma imensa variedade de ex-periências. Alguns, como eu, têm sido desenvolvedores profissionais de jogos por anos, e até por décadas. Outros estão só começando a aprender a programar para dispositivos iOS ou estão começando a se aventurar no excitante campo do desenvolvimento de jogos. Seja qual for a sua experi-ência, eu estou certo de que você vai ganhar alguma coisa com este livro.

Há uma coisa que une todos os desenvolvedores cocos2d: nós amamos jogos, e adoramos criá-los e programá-los. Este livro presta uma ho-menagem a eles, sem deixar de esquecer das ferramentas que ajudam a facilitar o processo de desenvolvimento. E, principalmente, ao longo do caminho, você estará fazendo jogos que interessam, e verá como este conhecimento é aplicado ao desenvolvimento de jogos reais.

Você vê, eu estou cheio desses livros que gastam todas as páginas me en-sinando a fazer outro estúpido clone de Asteroids usando alguma API específica de programação de jogos. E o que é mais importante, penso eu, são os conceitos e as ferramentas de programação de jogos, as coisas que

2 Aprenda a Desenvolver Jogos para iPhone e iPad com o cocos2d

continuam conosco mesmo que as APIs ou nossas preferências pessoais de programação mudem. Eu devorei, literalmente, centenas de livros de pro-gramação e de desenvolvimento de jogos, ao longo de 20 anos. Os livros a que mais dei valor, até hoje, são os que foram além da tecnologia e me ensinaram por que certas coisas são projetadas e programadas da forma como o são. Este livro foca não só no trabalho com código de jogos, mas também no por que ele funciona e quais negociações considerar.

Eu gostaria que você aprendesse a escrever jogos de interesse, jogos que sejam populares na App Store e relevantes para os jogadores. Eu vou guiar você pelas ideias e conceitos técnicos por trás desses jogos, neste livro, e, claro, como o cocos2d e o Objective-C fazem esses jogos acon-tecer. Você vai notar que o código fonte que vem com o livro é rico em comentários, o que deve ajudar na navegação e entendimento de todos os detalhes do código.

Aprender a partir do código fonte de outrem com um guia para ajudar a focar no que é importante é o que melhor funciona para mim, sempre que estou aprendendo algo novo – e eu gosto de pensar que isso vai fun-cionar para você também. E como você pode basear seus próprios jogos no código fonte do livro, eu espero jogar seus jogos num futuro próxi-mo! Não se esqueça de me contar sobre eles! Você pode me contatar em [email protected] ou visitar meu website dedicado ao aprendizado do cocos2d em www.learn-cocos2d.com.

Por que usar o cocos2d para iPhone?Quando os desenvolvedores de jogos procuram por um mecanismo de jogos, eles primeiro avaliam suas opções. Eu acho que o cocos2d é uma ótima escolha para muitos desenvolvedores, por muitas razões.

Ele é gratuitoAntes de mais nada, ele é gratuito. Não custa um único centavo trabalhar com ele. Você tem permissão para criar tanto aplicações gratuitas quanto comerciais do iPhone, iPod e iPad. E você não tem de pagar royalties.

Capítulo 1: Introdução 3

Como o cocos2d é basicamente um produto de uma só pessoa, criado por Ricardo Quesada, você pode querer considerar fazer uma doa-ção para ajudar a desenvolver ainda mais o cocos2d, ou considerar comprar um de seus projetos de código fonte comercial. Tanto doa-ções quanto projetos estão disponíveis no website da cocos2d Store: http://www.cocos2d-iphone.org/store.

Ele é de código abertoA próxima boa razão para se usar o cocos2d é que ele é de código aberto. Isto significa que não há caixa preta que impeça você de aprender com o có-digo do mecanismo de jogos, ou de fazer alterações nele, onde for necessário. Você pode baixar o cocos2d de www.cocos2d-iphone.org/download.

Ele é objetivo, vê?Além do mais, o código é escrito em Objective-C, a linguagem de pro-gramação nativa da Apple para escrita de aplicações para iPhone. É a mesma linguagem usada pelo iPhone SDK, o que torna mais fácil o en-tendimento da documentação da Apple e a implementação da funciona-lidade do iPhone SDK.

Um monte de outras APIs úteis, como o Facebook Connect e o OpenFeint também são escritas em Objective-C, de forma que ele torna mais fácil a integração destas, também.

Nota: É aconselhável o aprendizado do Objective-C, mesmo que você prefira alguma outra linguagem. Eu tenho uma forte base de C++ e e a sintaxe do Objective-C me pa-receu muito estranha, em princípio. E eu não estava feliz ante a perspectiva de aprender uma nova linguagem de programação conhecida como velha e desatualizada. Não é de surpreender que eu quebrei um bocado a cabeça para dominar a escrita de código numa linguagem de programação que me exigia largar de hábitos e expectativas.

Mas não deixe que a ideia de programar em Objective-C distraia você. Ele exige que você se acostume um pouco, mas logo o sacrifício se paga, ainda que só pela arrepiante quantidade de documentação disponível. Garanto que você não vai olhar para trás!

4 Aprenda a Desenvolver Jogos para iPhone e iPad com o cocos2d

Ele é 2DÉ claro que o cocos2d leva o 2D em seu nome por uma razão. Seu foco é ajudar você a criar jogos 2D. É uma especialização que poucos outros me-canismos de jogos para iOS estão atualmente oferecendo. Ele não impede você de carregar e exibir objetos 3D, mas você precisa escrever seu próprio código de expressão em 3D ou consultar outras soluções para carregamento e exibição de modelos 3D. Mas eu vou dizer que os dispositivos iOS são uma plataforma ideal para ótimos jogos 2D. E geralmente eles também são mais fáceis de se desenvolver e entender. E, em muitos casos, eles exigem menos do hardware, permitindo que você crie gráficos vibrantes e mais detalhados.

Ele tem físicaHá também dois mecanismos de física que você pode escolher, que já es-tão integrados ao cocos2d. De um lado, há o Chipmunk, e do outro há o Box2d. Ambos mecanismos de física diferem apenas superficialmente na linguagem em que são escritos: o Chipmunk é escrito em C, e o Box2d é escrito em C++. O conjunto de funcionalidades é quase o mesmo. Se estiver procurando diferenças, você encontrará algumas, mas isso exige um bom entendimento de como os mecanismos de física funcionam para basear sua escolha nas diferenças. Em geral, você deve simplesmente optar pelo mecanismo que ache ser o mais fácil de entender e que seja melhor documentado, e, para a maioria dos desenvolvedores, este tende a ser o Box2d. Além disso, sua natureza orientada por objetos torna-o um pouco mais fácil de se usar com o Objective-C.

Ele é menos técnicoO que os desenvolvedores de jogos mais gostam no cocos2d é como ele oculta o código OpenGL ES de baixo nível. A maioria dos gráficos é desenhada usando-se simples classes Sprite que são criadas a partir de arquivos de imagens. Em outras palavras, um Sprite é uma textura que pode sofrer alteração de escala, rotação e aplicação de cor, simples-mente mudando-se as propriedades Objective-C apropriadas da classe

Capítulo 1: Introdução 5

CCSprite. Você não tem de se preocupar com a forma como isto é implementado usando-se código OpenGL ES, o que é uma boa coisa.

Ao mesmo tempo, o cocos2d lhe dá a flexibilidade para adicionar seu próprio código OpenGL ES a qualquer instante, para qualquer objeto de jogo que precise dele. E se estiver pensando em adicionar alguns elemen-tos de interface de usuário Cocoa Touch, você gostará de saber que estes podem ser misturados, também.

E o cocos2d não só isola você das complexidades do OpenGL ES; ele também oferece uma abstração de alto nível de tarefas comumente reali-zadas, algumas das quais podem exigir extenso conhecimento do iPhone SDK. Mas se você precisar de acesso de mais baixo nível, o cocos2d não lhe prenderá.

Ele ainda é programaçãoEm geral, você poderia dizer que o cocos2d torna a programação de jogos iOS mais simples, ao mesmo tempo que ainda requer conhecimen-tos realmente excelentes de programação. Outros mecanismos de jogos iOS, como o Unity, o iTorque e o Shiva focam seus esforços em prover conjuntos de ferramentas e fluxos de trabalho para reduzir a quantida-de necessária de conhecimento de programação. Em troca, você se des-faz de um pouco de liberdade técnica – e de dinheiro, também. Com o cocos2d, você tem de pôr um pouco de esforço extra, mas você está tão perto do núcleo da programação de jogos quanto possível, sem ter de lidar realmente com o núcleo.

Ele tem uma ótima comunidadeA comunidade do cocos2d sempre tem alguém pronto para responder a uma questão, e os desenvolvedores, em geral, estão abertos ao compar-tilhamento de conhecimentos e informações.

Novos tutoriais e código fonte de amostra são liberados quase diaria-mente, a maioria deles de graça. E você encontrará, espalhados pela In-ternet, miríades de recursos para aprender e se inspirar.

6 Aprenda a Desenvolver Jogos para iPhone e iPad com o cocos2d

Depois que seu jogo estiver completo e liberado na App Store, você po-derá até promovê-lo no website do cocos2d. No mínimo, você chamará a atenção de colegas desenvolvedores, e com sorte, valioso feedback.

Nota: Para ficar em dia com o que está acontecendo na comunidade do cocos2d, eu recomendo seguir o cocos2d no Twitter: http://twitter.com/cocos2d.

Estando lá, você poderá querer me seguir, também: http://twitter.com/gaminghorror.

Em seguida, entre “cocos2d” na caixa de busca do Twitter e depois clique no link “Save this search”. Desta forma, você poderá checar regularmente novas posta-gens sobre o cocos2d com um único clique. Muito frequentemente, você verá úteis informações relacionadas com o cocos2d que do contrário passariam despercebi-das. E, definitivamente, você poderá conhecer colegas desenvolvedores que tam-bém estejam trabalhando com o cocos2d.

Importantes seleções do cocos2dHá duas coisas que eu acho que são importantes para os desenvolvedo-res cocos2d, de forma que quero mencioná-las aqui, imediatamente.

Seção 3.3.1Embora possa soar como uma certa organização secreta do governo, no Universo de Star Trek, a Seção 3.3.1 é na verdade uma seção do Acordo de Licença da Apple. Ela se tornou sinônimo de certa mudança na polí-tica com a liberação do iPhone SDK 4. A política restringe mais ou me-nos os desenvolvedores de iOS a usarem as linguagens de programação Objective-C, C, C++ e JavaScript. Esta mudança para limitar o desen-volvimento do iOS a linguagens de programação específicas tem gerado uma grande discussão e preocupação entre os desenvolvedores de iOS.

Como o cocos2d é inteiramente escrito em Objective-C, e bibliotecas ex-ternas como os mecanismos de física Chipmunk e Box2d são escritos em C e C++, respectivamente, embora destinadas diretamente ao iPhone SDK

Capítulo 1: Introdução 7

e não fazendo uso de quaisquer APIs privadas, é justo dizer-se que os de-senvolvedores cocos2d não devem precisar se preocupar de forma alguma. Jogos e aplicativos feitos com o cocos2d não serão rejeitados pela Apple na base da Seção Section 3.3.1.

O consenso geral é de que a mudança na política da Apple com relação ao uso de linguagens e desautorizando “camadas intermediárias” é pri-mariamente para evitar que aplicações e jogos escritos em Adobe Flash ganhem uma fatia do mercado de iOS.

Portando para outras plataformasVocê deve ter notado que existem portadas do cocos2d para várias pla-taformas, incluindo o Windows e o Android. Elas compartilham o mes-mo nome e filosofia de desenvolvimento, mas são escritas em linguagens diferentes por autores diferentes e não têm afiliação com o cocos2d para iPhone. Por exemplo, a portada do cocos2d para Android é escrita em Java, que é a linguagem nativa quando do desenvolvimento para dispo-sitivos Android.

Se estiver interessado em portar seus jogos para outras plataformas, você deve saber que os vários mecanismos de jogos do cocos2d diferem um bo-cado. Portar seu jogo para o Android, por exemplo, não é uma tarefa fácil. Primeiro, há a barreira da linguagem – todo o seu código Objective-C deve ser reescrito em Java. Depois disso, você ainda precisará fazer muitas mo-dificações para lidar com as numerosas mudanças na API do cocos2d ou possíveis funcionalidades não suportadas pela portada ou pela plataforma alvo. Por fim, cada portada pode ter seus próprios tipos de erros, e cada plataforma tem suas próprias limitações e desafios técnicos.

No geral, portar jogos do iOS escritos com o cocos2d para outras plata-formas que também têm um mecanismo de jogos cocos2d exige quase o mesmo esforço que reescrever o jogo para a plataforma alvo usando-se algum outro mecanismo de jogos. Isto significa que não há alternância que você acione e funcione. A similaridade dos mecanismos do cocos2d através de várias plataformas é apenas em nome e filosofia.

8 Aprenda a Desenvolver Jogos para iPhone e iPad com o cocos2d

Este livro é para vocêEu gostaria de pensar que você escolheu este livro porque seu título cha-mou sua atenção. Suponho que você queira fazer jogos 2D para o iPhone e o iPad, e que o mecanismo de jogos de sua escolha seja o cocos2d para iPhone. Ou, talvez, você não se preocupe tanto com o mecanismo de jogos, mas queira fazer jogos 2D para dispositivos iOS em geral. Talvez você esteja procurando por alguma discussão a fundo sobre o cocos2d, uma vez que já o esteve usando há algum tempo. Sejam quais forem as suas razões para escolher este livro, eu estou certo de que você vai aproveitá-lo muito.

Pré-requisitosComo com qualquer livro de programação, há alguns prerrequisitos que é bom que sejam satisfeitos, e alguns que são quase obrigatórios.

Experiência de programaçãoA única coisa que é mandatória para este livro é algum grau de expe-riência de programação, então vamos tirar logo isso do caminho. Você deve ter um entendimento de conceitos de programação como laços, funções, classes, e assim por diante. Se você já tiver escrito um programa de computador, preferivelmente usando uma linguagem de programação orientada por objetos, isso deve bastar.

Ainda por aqui? Ótimo.

Objective-CEntão você tem experiência em programação, mas talvez nunca tenha escrito nada nessa obscura linguagem chamada Objective-C.

Você não precisa saber Objective-C para este livro, mas defi nitivamente sa-ber o básico da linguagem ajuda. Se já estiver familiarizado com ao menos uma outra linguagem de programação baseada em objetos, tal como o C++, o C#, ou o Java, você poderá ser capaz de aprendê-la a caminho. Mas,

Capítulo 1: Introdução 9

para ser honesto, eu achei difícil fazê-lo, mesmo depois de uns 15 anos de experiência de programação com C++, C#, e várias linguagens de script. Há sempre aquelas pequenas e incômodas questões sobre coisas mínimas que você simplesmente não consegue pegar, e elas tendem a roubar sua atenção. Nesse caso, é útil ter um recurso que você possa consultar sempre que hou-ver alguma coisa que você precise entender a respeito do Objective-C.

Eu tinha um valioso livro de Objective-C para aprender, e recomendo-o de coração como livro de cabeceira, caso você queira aprender mais so-bre Objective-C e Xcode. Ele se chama Learn Objective-C on the Mac, de Mark Dalrymple e Scott Knaster, publicado pela Apress.

Há também o “Introduction to the Objective-C Programming Language”, da Apple, que se provou valioso como referência online. Ele está disponível aqui:

http://developer.apple.com/mac/library/DOCUMENTATION/Cocoa/Conceptual/ObjectiveC/Introduction/introObjectiveC.html

O Objective-C pode parecer assustador com seus colchetes, e você pode ter ouvido algumas histórias de terror sobre seu gerenciamento de me-mória e de como não há coleta de lixo no iPhone. Não se preocupe.

Antes de mais nada, o Objective-C é apenas uma roupagem diferen-te. Ele parece estranho, mas os conceitos de programação subjacentes, como laços, classes, herança e chamadas a funções ainda funcionam da mesma forma que em outras linguagens de programação. A terminologia pode ser diferente, por exemplo: o que os desenvolvedores Objective-C chamam de enviar mensagens é, em essência, o mesmo que chamar um método. Quanto ao gerenciamento de memória, vamos dizer apenas que o cocos2d o torna tão fácil para você quanto possível, e eu ajudarei no entendimento das regras muito simples e básicas que você pode seguir.

O que você irá aprenderEu vou fornecer a você uma boa partilha de minha experiência no desen-volvimento de jogos, para mostrar como os jogos interativos são feitos. Acredito que aprender a programar não tem nada a ver com memoriza-

10 Aprenda a Desenvolver Jogos para iPhone e iPad com o cocos2d

ção de métodos de API, ainda que muitos livros sobre desenvolvimento de jogos que eu li ao longo das duas décadas passadas sigam essa abor-dagem de “livro de consulta”. Mas é para isso que serve a documentação da API. Quando eu comecei a programar, a cerca de 20 anos, eu pensei que jamais aprenderia a programar pelo simples exame de uma imensa pilha de manuais e livros de referência de compiladores. De volta àquele tempo, os manuais de compiladores ainda eram impressos, e, obviamen-te, não vinham com versões online. A World Wide Web ainda estava em sua infância. Assim, toda aquela informação estava empilhada em cerca de 35 cm de altura, na minha mesa, e parecia muito assustador tentar aprender tudo aquilo.

Hoje, e ainda não tenho de cor a maioria dos métodos e APIs, e con-tinuo esquecendo dos que eu costumava saber. Eu os revejo de vez em quando. Depois de 20 anos de programação, eu sei o que é realmente importante de se aprender: os conceitos. Bons conceitos de programação e melhores práticas duram muito tempo, e ajudam a programar em qual-quer linguagem. O aprendizado de conceitos é melhor conseguido pelo entendimento da racionalidade por trás das escolhas que foram feitas no projeto, estruturação e escrita do código fonte. É isso o que eu vou focar na maior parte do tempo.

O que os desenvolvedores principiantes do iOS vão aprenderMas não se preocupe – eu também vou facilitar para você os aspectos mais importantes do cocos2d. Vou focar nos tipos de classes, métodos e conceitos que você deve ser capaz de lembrar de cor, simplesmente por-que eles são tão fundamentais para se programar com o cocos2d.

Você também vai aprender sobre as ferramentas essenciais que suportam ou são suportadas pelo cocos2d. Sem essas ferramentas, você só será metade do programador cocos2d que poderá ser. Você vai usar ferra-mentas como o Zwoptex e o ParticleDesigner para criar jogos que serão crescentemente complexos e desafiadores de se desenvolver. Devido ao escopo deste livro, esses jogos não serão completos e acabados, nem nós vamos ser capazes de discutir cada linha de código. Ao invés, eu vou