© Novatec Editora Ltda. 2014. · 8 programação de jogos android Classe View ..... 50

14

Transcript of © Novatec Editora Ltda. 2014. · 8 programação de jogos android Classe View ..... 50

© 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