Upload
trinhkien
View
217
Download
0
Embed Size (px)
Citation preview
© Novatec Editora Ltda. 2014.
Todos os direitos reservados e protegidos pela Lei 9.610 de 19/02/1998. É proibida a reprodução desta obra, mesmo parcial, por qualquer processo, sem prévia autorização, por escrito, do autor e da Editora.
Editor: Rubens PratesRevisão gramatical: Marta Almeida de SáEditoração eletrônica: Carolina KuwabataCapa: Leonardo Trujillo
ISBN: 978-85-7522-367-3 OG20141001
Histórico de impressões:
Outubro/2012 Primeira edição
Novatec Editora Ltda.Rua Luís Antônio dos Santos 11002460-000 – São Paulo, SP – BrasilTel.: +55 11 2959-6529E-mail: [email protected]: www.novatec.com.brTwitter: twitter.com/novateceditoraFacebook: facebook.com/novatecLinkedIn: linkedin.com/in/novatec
7
Sumário
Agradecimentos .................................................................................................................. 19
Sobre o autor ...................................................................................................................... 20
Prefácio .............................................................................................................................. 21
introdução .......................................................................................................................... 23Público-alvo ......................................................................................................24Pré-requisitos ....................................................................................................24Estrutura do livro..............................................................................................25Convenções usadas no livro ...............................................................................27
Convenções de código deste livro ..................................................................28Como acompanhar o código-fonte .....................................................................28
Português ou inglês? .....................................................................................29Exercícios e desafios ..........................................................................................30Site e fórum do livro ..........................................................................................30Arquivos para download ...................................................................................30Manifesto: gerar consciência! ............................................................................. 31
Parte I ■ preparando o terreno ......................................................................... 33
Capítulo 1 ■ Conhecendo o ambiente Eclipse ....................................................................... 35Configurando o seu ambiente ............................................................................36
Plugins do Android para o Eclipse ................................................................39O aplicativo Hello World ...................................................................................42
Classe Activity .............................................................................................47
8
programaçãode jogos android
Classe View ..................................................................................................50Classe R .......................................................................................................52Hello, world! ................................................................................................53Arquivo de manifesto ...................................................................................55
Executando um aplicativo .................................................................................58Executando em um dispositivo real ...............................................................58Executando em um dispositivo emulado ...................................................... 60
Localização: seu aplicativo poliglota! .................................................................62Ciclo de vida de uma atividade ..........................................................................64Conclusão........................................................................................................ 66Exercícios .........................................................................................................67
Capítulo 2 ■ Tópicos extras do Eclipse .................................................................................. 69Verificações de erro do Eclipse ...........................................................................70Modo de depuração ..........................................................................................72Perspectiva Debug .............................................................................................73
Comunicação com o dispositivo ...................................................................73Adivinhe o número .......................................................................................... 77
Ciclo de vida da atividade ............................................................................ 77Criando a interface de usuário ......................................................................82Alterando o código-fonte ..............................................................................85Onde está Waldo… quer dizer, o bug? ............................................................87
Conclusão........................................................................................................ 96Exercícios ........................................................................................................ 96
Parte II ■ Visão geral dos objetivos do livro ....................................................... 97
Capítulo 3 ■ Biblioteca SimpleGameEngine ........................................................................ 99Visão geral do game engine .............................................................................100Estrutura do game engine ................................................................................101
Nível de infraestrutura ................................................................................101Nível de elementos de jogo ......................................................................... 102Nível de interface gráfica ............................................................................ 104Faltou algo?................................................................................................ 104
Criação do projeto no Eclipse .......................................................................... 105Criação da classe SGActivity ....................................................................... 105
Conclusão....................................................................................................... 107
9
Sumário
Capítulo 4 ■ Pong ............................................................................................................. 109Um pouco de história .......................................................................................110Descrição do documento de projeto (game design) ............................................ 111
Visão geral do jogo ...................................................................................... 111Aspecto visual do jogo .................................................................................112Modelo de domínio do jogo ........................................................................113Elementos do modelo de domínio ...............................................................114
Projeto de aplicativo (em contraste com o jogo em si) ........................................119Criação do projeto no Eclipse .......................................................................... 120
Criação da classe GameActivity .................................................................. 122Conclusão....................................................................................................... 124
Parte III ■ infraestrutura do game engine ...................................................... 125
Capítulo 5 ■ Ambiente de aplicativo ................................................................................. 127Mantendo o dispositivo acordado sem cafeína .................................................. 127Modo paisagem ou modo retrato? .................................................................... 128Configuração do modo de tela cheia .................................................................131Armazenando preferências de jogo ................................................................... 135Modificando PongV1 ....................................................................................... 140Conclusão....................................................................................................... 142Exercícios ....................................................................................................... 142
Capítulo 6 ■ Customização de visão .................................................................................. 143Criando uma visão customizada ...................................................................... 143
O método onDraw() e seu parâmetro Canvas .............................................. 145Modificando SimpleGameEngineV1 ................................................................ 150
Criação da classe SGView ........................................................................... 150Modificando PongV1 ....................................................................................... 152Conclusão....................................................................................................... 156Exercícios ....................................................................................................... 156Desafios .......................................................................................................... 157
Capítulo 7 ■ Loop de jogo e temporização ......................................................................... 159Conceitos básicos de loop de jogo ....................................................................160
Aspectos técnicos do loop de jogo ............................................................... 162
10
programaçãode jogos android
Modificando SimpleGameEngineV1, parte 1 ..................................................... 163Criação do loop de jogo na classe SGView................................................... 163
Modificando PongV1, parte 1 ...........................................................................164Movimentação da bola na classe GameView................................................ 165Movimentação do oponente na classe GameView ........................................ 167
Conceitos básicos de temporização ..................................................................168Cálculo do tempo transcorrido ................................................................... 170
Modificando SimpleGameEngineV1, parte 2 .................................................... 172Criação da classe SGStepwatch ................................................................... 172Inserção do código de temporização na classe SGView ................................. 173
Modificando PongV1, parte 2 ............................................................................174Conclusão....................................................................................................... 177Exercícios ....................................................................................................... 178Desafios .......................................................................................................... 180
Capítulo 8 ■ Carregamento de imagens ............................................................................ 181Conceitos básicos de tipos de imagens ............................................................. 182
Carregando imagens no Android ................................................................ 183Fábrica de imagens ..................................................................................... 184
Modificando SimpleGameEngineV1 ................................................................ 184Criação da classe SGImage ......................................................................... 184Criação da classe SGImageFactory .............................................................. 185Inclusão da fábrica de imagens na classe SGView ........................................ 190
Modificando PongV1 ....................................................................................... 190Conclusão....................................................................................................... 194Exercícios ....................................................................................................... 194
Capítulo 9 ■ Renderizador gráfico ..................................................................................... 197Conceitos básicos de renderização ................................................................... 198Modificando SimpleGameEngineV1 ................................................................ 199
Criação da classe SGRenderer ..................................................................... 199Inclusão do renderizador na classe SGView .................................................203
Modificando PongV1 .......................................................................................203Conclusão.......................................................................................................205Desafio ...........................................................................................................205
11
Sumário
Capítulo 10 ■ Entrada de dados ........................................................................................ 207Conceitos básicos de entrada de usuário ..........................................................208Criando e modificando “10.InputTest” .............................................................209
Capturando toques ....................................................................................209Capturando gestos ...................................................................................... 211
Modificando SimpleGameEngineV1 ................................................................ 216Criação da classe SGInputSubscriber .......................................................... 216Criação da classe SGInputPublisher .............................................................217Inclusão da classe publicadora na classe SGActivity .....................................220
Modificando PongV1 ....................................................................................... 221Movimentação do paddle do jogador na classe GameView ........................... 221Configuração da classe GameActivity como assinante .................................222
Conclusão....................................................................................................... 223Exercícios ....................................................................................................... 223Desafios .......................................................................................................... 224
Parte IV ■ mundo de jogo no simplegameengine ............................................ 225
Capítulo 11 ■ Mundo e entidades ..................................................................................... 227Conceitos básicos — Hello, World! ..................................................................227
Saudações, entidades, eu vim em paz! ..........................................................230Padrão MVC ...............................................................................................231
Importando e Modificando SimpleGameEngineV2 .......................................... 233Criação da classe SGWorld ......................................................................... 233Criação da classe SGEntity ......................................................................... 234Desenho a partir de posição e dimensões na classe SGRenderer ................... 237
Importando e Modificando PongV2 .................................................................238Criação da classe EntBall ............................................................................ 239Criação da classe EntPaddle .......................................................................240Criação da classe EntPlayer .........................................................................241Criação da classe EntOpponent .................................................................. 242Criação da classe GameModel .................................................................... 243Refatoração da classe GameView ................................................................246Criação da classe GameController .............................................................. 249Refatoração da classe GameActivity ............................................................250
Conclusão........................................................................................................251Exercícios ........................................................................................................251
12
programaçãode jogos android
Capítulo 12 ■ Detecção de colisão ..................................................................................... 253Conceitos básicos de detecção de colisão ..........................................................254
Colisão entre retângulos ............................................................................. 255Área de desenho versus área de colisão ........................................................258
Modificando SimpleGameEngineV2 ................................................................260Inclusão do código de colisão na classe SGWorld ........................................260Inclusão do código de colisão na classe SGEntity .........................................260
Modificando PongV2 ......................................................................................262Configuração das áreas de colisão na classe GameModel .............................263Colisão com a borda inferior do mundo na classe EntOpponent ..................264Colisão com os paddles na classe EntBall ....................................................264
Conclusão.......................................................................................................266Exercícios ....................................................................................................... 267
Capítulo 13 ■ Triggers, timers e estados de jogo ................................................................ 269Conceitos básicos de triggers ...........................................................................270
Definição de um timer em contraste ao stepwatch ....................................... 271Descrição dos triggers usados no Pong ........................................................272
Conceitos básicos de estados de jogo................................................................273Definição dos estados de jogo ..................................................................... 274
Modificando SimpleGameEngineV2 ................................................................276Criação da classe SGTrigger ........................................................................276Criação da classe SGTimer .........................................................................278
Modificando PongV2 ......................................................................................280Estados de jogo e métodos auxiliares de GameModel ..................................280Modificando a movimentação da bola na classe EntBall ..............................283Criação dos triggers ...................................................................................285Inclusão e configuração dos triggers em GameModel ...................................288Inclusão dos timers e implementação dos estados em GameModel ..............292Automatizando o desenho das entidades na classe GameView .....................294Restringindo o paddle durante o reinício da partida em GameController .....297
Conclusão.......................................................................................................297Exercícios .......................................................................................................298Desafios ..........................................................................................................299
13
Sumário
Parte V ■ modelo de domínio do pong ............................................................ 301
Capítulo 14 ■ Movimentação do oponente ........................................................................ 303O que é comportamento inteligente? ................................................................304Movimentação do oponente ............................................................................304
Tempo de reação ........................................................................................306Progressão da dificuldade ................................................................................309
Tempo de reação ........................................................................................309Velocidade do oponente ............................................................................. 310
Conclusão........................................................................................................314Exercícios ........................................................................................................314
Capítulo 15 ■ Movimentação da bola ................................................................................ 315Conceitos básicos de velocidade escalar e vetorial ............................................. 315Paddle e ângulo da bola....................................................................................321
Inclusão das divisões do paddle em EntPaddle ............................................ 322Movimentação da bola .................................................................................... 323
Look-Up Table (LUT) ................................................................................. 325Modificação do método step() .................................................................... 327Ângulo e velocidade da bola no reinício de partida ......................................330
Conclusão....................................................................................................... 333Exercícios ....................................................................................................... 333
Parte VI ■ SimpleGameEngine – Elementos audiovisuais ................................ 335
Capítulo 16 ■ Tilesets ....................................................................................................... 337Conceitos básicos de tileset .............................................................................. 337Importando e modificando SimpleGameEngineV3 .......................................... 341
Criação da classe SGTileset ......................................................................... 341Modificando PongV3 ......................................................................................345
Inclusão dos tilesets em GameView .............................................................345Conclusão.......................................................................................................348Exercícios .......................................................................................................349Desafio ...........................................................................................................349
14
programaçãode jogos android
Capítulo 17 ■ Animação ................................................................................................... 351Conceitos básicos de animação .........................................................................351
Estados de animação .................................................................................. 352Definição das animações do Pong ............................................................... 353Tratando estados simultâneos em uma entidade .......................................... 355
Modificando SimpleGameEngine .................................................................... 358Criação da classe SGAnimation .................................................................. 358Inclusão de estados na classe SGEntity ........................................................363
Modificando PongV3 ......................................................................................364Inclusão dos estados dos paddles em EntPaddle ..........................................365Inclusão e controle dos estados da bola em EntBall .....................................366Controle dos estados em EntPlayer .............................................................368Controle dos estados em EntOpponent .......................................................368Controle dos estados da bola em TrgLowerWall e TrgUpperWall ..................369Controle dos estados dos paddles em TrgLeftGoal e TrgRightGoal ............... 370Criação e configuração das animações em GameView ................................. 372
Conclusão....................................................................................................... 378Exercícios ....................................................................................................... 379Desafios .......................................................................................................... 379
Capítulo 18 ■ Sprites ........................................................................................................ 381Conceitos básicos de sprite .............................................................................. 381
Posição e dimensões do sprite .....................................................................383Descritor de sprites ....................................................................................384
Modificando SimpleGameEngine ....................................................................385Criação da classe SGSpriteDesc ..................................................................385Criação da classe SGSprite ..........................................................................387
Modificando PongV3 .......................................................................................391Inclusão e configuração dos sprites em GameView .......................................391
Conclusão....................................................................................................... 397Exercício .........................................................................................................398Desafios ..........................................................................................................398
Capítulo 19 ■ Desenhando texto ....................................................................................... 399Conceitos básicos de tipografia ........................................................................399
Escrevendo texto com tilesets ......................................................................400Modificando SimpleGameEngine ....................................................................402
15
Sumário
Criação da classe SGText ............................................................................402Criação da classe SGFont ...........................................................................403Desenhando texto na tela com SGRenderer .................................................404
Modificando PongV3 ......................................................................................405Descobrindo quem marcou o ponto em GameModel ...................................406Definição do paddle marcador em TrgLeftGoal e TrgRightGoal ....................406Configuração das strings de jogo em strings.xml .........................................407Criação dos textos de jogo em GameView ...................................................408
Conclusão....................................................................................................... 413Exercícios ....................................................................................................... 413Desafios ...........................................................................................................414
Capítulo 20 ■ Música e efeitos sonoros .............................................................................. 415Conceitos básicos de áudio .............................................................................. 415
Formatos de áudio ......................................................................................417Música versus efeitos sonoros ..................................................................... 419Carregando efeitos sonoros .........................................................................420Reprodução de música ............................................................................... 421
Modificando SimpleGameEngine ....................................................................423Criação da classe SGSoundPool ..................................................................423Criação da classe SGMusicPlayer ................................................................426
Modificando PongV3 ......................................................................................430Inclusão dos estados de colisão no modelo ...................................................431Inclusão dos efeitos sonoros e da música em GameView ..............................434Pausa e liberação dos recursos de música em GameActivity .........................436
Conclusão.......................................................................................................438Exercícios .......................................................................................................438
Parte VII ■ Transformações 2D ........................................................................ 439
Capítulo 21 ■ Redimensionamento de cena – Teoria ......................................................... 441Transformações 2D .........................................................................................442
Translação .................................................................................................442Redimensionamento ..................................................................................443
Razão de aspecto .............................................................................................445Sistemas de coordenadas .................................................................................450A viewport como área de visualização .............................................................. 453
16
programaçãode jogos android
Eliminação de objetos não desenhados usando clipping .............................. 461Modos de redimensionamento .........................................................................462Conclusão.......................................................................................................463Exercícios .......................................................................................................464Desafios ..........................................................................................................464
Capítulo 22 ■ Redimensionamento de cena – Prática ........................................................ 467Criação de um novo emulador .........................................................................467Importando e modificando SimpleGameEngineV4 ..........................................468
Criação da classe SGViewport ....................................................................468Inclusão da viewport em SGRenderer.......................................................... 473Modificação dos métodos de desenho em SGRenderer................................. 474
Modificando PongV4 ......................................................................................482Inclusão da viewport em GameView ...........................................................482
Conclusão.......................................................................................................483Exercícios .......................................................................................................484Desafio ...........................................................................................................484
Parte VIII ■ Interface Gráfica .......................................................................... 485
Capítulo 23 ■ Interface gráfica, parte I .............................................................................. 487Conceitos básicos de interface gráfica ...............................................................487
Origem das interfaces gráficas ....................................................................489Visão geral dos widgets ...............................................................................490Estrutura de uma interface gráfica ..............................................................490Sistema de coordenadas da GUI .................................................................495Visibilidade e ativação dos widgets ..............................................................496Interatividade de um widget .......................................................................496
Modificando SimpleGameEngineV4 ................................................................497Criação da classe SGWidget .......................................................................498Criação da classe SGWidgetLabel ...............................................................503Criação da classe SGWidgetContainer ........................................................505Criação da classe SGGui ............................................................................. 511
Modificando PongV4 .......................................................................................513Remoção de código obsoleto em GameView .................................................513Criação da GUI e dos widgets em GameView .............................................. 516Renderização da interface gráfica em GameView ..........................................519
17
Sumário
Conclusão....................................................................................................... 522Exercícios ....................................................................................................... 522Desafios .......................................................................................................... 523
Capítulo 24 ■ Interface gráfica, parte II ............................................................................. 525Estrutura básica de um botão .......................................................................... 525Modificando SimpleGameEngineV4, parte 1..................................................... 526
Criação da classe SGWidgetButton ............................................................. 526Modificando PongV4, parte 1 ........................................................................... 528
Criação dos métodos de pausa em GameModel .......................................... 528Criação e renderização do botão em GameView .......................................... 529Tratamento de foco da visão ........................................................................531Vinculação da interface gráfica em GameController ..................................... 532Correção do controlador em GameActivity .................................................. 534A hora da verdade... .................................................................................... 534
Modificando SimpleGameEngine, parte 2 ........................................................ 535Tratando eventos up e down não pareados em SGGui .................................. 535Eventos up e down não pareados em SGWidgetButton ................................536
Conclusão....................................................................................................... 539Exercícios ....................................................................................................... 539Desafio ........................................................................................................... 539
Parte IX ■ Finalização do projeto .................................................................... 541
Capítulo 25 ■ Estados de aplicativo ................................................................................... 543Conceitos básicos sobre estados de aplicativo ...................................................543
Usando múltiplas atividades para controlar os estados do aplicativo .............545Modificando PongV4 ......................................................................................546
Inclusão das constantes de dimensões da cena em GameModel ...................546Estado SplashScreen ................................................................................... 547Estado StartScreen ..................................................................................... 550Estado MenuScreen.................................................................................... 553Estado Game .............................................................................................566
Conclusão........................................................................................................571Exercícios ........................................................................................................571Desafios .......................................................................................................... 572
18
programaçãode jogos android
Capítulo 26 ■ Preparação para o Google Play .................................................................... 573Lidando com o botão de retorno do dispositivo ................................................ 574
Modificando SimpleGameEngineV4 ........................................................... 575Modificando PongV4 .................................................................................577
Publicação no Google Play ..............................................................................580Inscrição no Google Play ............................................................................ 581Preparando o aplicativo para publicação .....................................................582
Conclusão........................................................................................................591
Parte X ■ Ao infinito e além! ........................................................................... 593
Capítulo 27 ■ Próximos passos .......................................................................................... 595O que é possível fazer com o SGE? ...................................................................596O que não é possível fazer com o SGE? .............................................................598Próximos passos ..............................................................................................599
Rotação de sprites ......................................................................................599Multitoques ............................................................................................... 601Arquivos de script ......................................................................................604Física .........................................................................................................608Bibliotecas de terceiros ............................................................................... 610
Conclusão....................................................................................................... 613
Apêndice A ■ Fundamentos matemáticos ......................................................................... 615Sistemas de coordenadas ................................................................................. 615Razão e proporção ........................................................................................... 619Curso relâmpago de trigonometria ....................................................................621Radianos ........................................................................................................ 625Curvas matemáticas ........................................................................................ 627
Apêndice B ■ Curva de progressão da velocidade do oponente ........................................... 633
Apêndice C ■ Inversão do cálculo de intersecção entre retângulos ...................................... 637
Apêndice D ■ Guia de referência do SimpleGameEngine ..................................................... 641
Referências bibliográficas .................................................................................................. 661
Índice remissivo ................................................................................................................ 663