Desenvolvendo jogos com LibGDX com LibGDX Matheus Bodo @matheusbodo http://blog.matheusbodo.com
LibGDX -Criado por Mario Zechner -Mais de 50 jogos publicados no Android Market, segundo o site oficial.
Utiliza a linguagem Java -Continua em desenvolvimento
Multi-plataforma -Aumenta a produtividade, pois não é necessário fazer deploy no celular toda hora. -Estão trabalhando no suporte para iOS através de IKVM e MonoTouch.
Open Source -Vantagens essenciais de ser open source: estudar o código e possibilidade de fazer alterações caso seja necessário. -Boa documentação -Vários exemplos de jogos no repositório oficial
Performance Boa performance: -Open GL -Otimizações usando código nativo -Evita gerar Garbage Collector
Fácil de usar Fácil de usar -API intuitiva -De novo: boa documentação (Wiki, JavaDocs, Forum, Blog, Twitter)
Arquitetura do LibGDX -Arquitetura do LibGDX -Application: cuida do ciclo de vida da aplicação -Files: leitura e escrita em arquivos. Não vai ser coberto na apresentação. -Audio: provê funcionalidades para utilizar sons nos jogos -Input: permite acessar dados de entrada do usuário -Graphics: abstração de gráficos usando OpenGL -Outros módulos, como Box2D.
Ciclo de Vida Ciclo de vida de um jogo -Create: carregar recursos na memória -Render: chamada o maior número de vezes possível (evite alocar objetos aqui) -Pause: salvar o estado do jogo -Dispose: desalocar recursos
Game e Screen -Principais classes do módulo Application Game: implementação default de ApplicationListener Screen: abstração para as várias telas do jogo Importante: render é chamado a maior quantidade de vezes possível, por isso deltaTime é importante para fazer as coisas dependerem do tempo.
Gráficos
Câmera -Similar à uma câmera filmadora -Tem o papel de capturar imagens da cena para a tela. -Funções: mover, zoom -Conversão de coordenadas -Na cena, as coordenadas crescem da esquerda para a direita, de baixo para cima.
Viewport -Necessário definir o viewport na câmera. -Viewport: região retangular onde a cena é projetada. Não é necessariamente do mesmo tamano da tela. -A unidade de medida é a mesma utilizada para definir a cena.
Câmera PerspectiveCamera OrthographicCamera -PerspectiveCamera: 3D. A cena é projetada no viewport em relação a um PONTO observador. -OrtographicCamera: 2D. A cena é projetada no viewport em relação a um plano infinito observador. PerspectiveCamera OrthographicCamera
Texture -Texture: uma imagem carregada na memória. -Principal responsável pelo tamanho da aplicação gerada. -Dimensão em potência de 2 -Sugestão: dividir em vários arquivos, mas não ultrapassar 2048 pixels, para tentar otimizar a performance do Open GL. -Dividir os sprites nas texturas baseados nas telas que vão ser usados.
SpriteBatch -Classe utilitária utilizada para desenhar sprites na cena. -Acumula comandos de desenho para otimizar o uso do OpenGL. -A posição x,y one a imagem é desenhada no canto bottom-left
Imagens -TextureRegion: região retangular de uma textura. -Sprite: tipo especial de TextureRegion que guarda a posição, tamanho, eixo de origem e rotação -Animation: conjunto de TextureRegions. A TextureRegion que vai ser desenhada depende do tempo do jogo.
Textos _BitmapFont: lê informações de fonte dos arquivos .fnt e .png -TextBounds: calcula o tamanho em pixels do texto nas configurações atuais da fonte. -Posição x,y do texto desenhado é a top-left
Audio -Também muito importante -Deixa o jogo muito mais rico -Pode prover uma experiência de uso muito boa ao jogador. -Formatos suportados: mp3, ogg e wave
Music - Music: Ideal para musica de fundo (arquivos de som grandes). Som é carregado de acordo com a necessidade. O arquivo não fica inteiro na memória. -Cuidado com o tamanho dos sons. Pode aumentar significativamente o tamanho da aplicação e causar problemas de memória.
Sound -Sound: Ideal para efeitos sonoros (arquivos pequenos). Fica carregado inteiro na memória.
Entrada de Dados -Receber a interação do jogador
InputProcessor -Interface utilizada para tratar input de dados. -Outras entradas possíveis: acelerômetro e bússola através de Gdx.input
Mouse e Touch touchDown(int x, int y, int pointer, int button) touchUp(int x, int y, int pointer, int button) touchDragged(int x, int y, int pointer) touchMoved(int x, int y) scrolled(int amount) -Eventos tratados pelo InputProcessor -TouchMoved e Scrolled não são chamados no Android
Mouse e Touch touchDown(int x, int y, int pointer, int button) touchUp(int x, int y, int pointer, int button) touchDragged(int x, int y, int pointer) touchMoved(int x, int y) scrolled(int amount) -Eventos tratados pelo InputProcessor -TouchMoved e Scrolled não são chamados no Android
Keyboard keyDown(int keycode) keyUp(int keycode) keyTyped(char character) -Key typed: chamado várias vezes enquanto a tecla estiver pressionada
Exemplo: Bricks
Mais informações http://libgdx.badlogicgames.com/ http://code.google.com/p/libgdx/ ZECHNER, Mario. Beginning Android Games. Apress, 2011.
Dúvidas? bodo.matheus@gmail.com @matheusbodo http://blog.matheusbodo.com