quinta-feira, 25 de janeiro de 2018

Leituras essencias para o Desenvolvedor de Jogos que quer ir fundo no aspecto tecnológico matemático

Repost de https://bladecast.pro/programacao/livros-essenciais-desenvolvimento-jogos

Desenvolver jogos em 2018 é uma tarefa muito mais fácil do que há poucos anos atrás antes do advento de engines como Unity e Construct. Porém para poder ir além do que as engines entregam de maneira mais automática e direta o estudo dos fundamentos é fundamental, em sites é possível se estudar qualquer coisa mas em geral o material é disperso.
A vantagem de se utilizar livros para estudar um assunto é que os livros costumam ser abrangentes, testam o seu conhecimento com exercícios e você passa mais tempo estudando do que procurando material na internet.
Esta é a lista dos livros que considero essenciais para se tornar um desenvolvedor de grande competência e sem medo de experimentar suas próprias ideias.
Além de recomendar os livros que você deve ler também vou dizer minha opinião de quais livros você pode pular sem culpa.
Língua dos livros. Infelizmente os livros que estou recomendando são escritos por autores de outros países, se alguma tradução se tornar disponível atualizarei esta lista o mais rápido possível.

Matemática

Como muita gente já deve lhe ter dito, jogos envolvem muita matemática, e eu concordo. Porém nem tudo que é dado em sala de aula no ensino médio e superior é de grande importância para o nosso assunto.

3D Math Primer for Graphics and Game Development, Segunda Edição

Assim como está escrito no título, este livro serve como uma introdução da matemática em três dimensões utilizada na programação gráfica e programação de jogos em geral. Se esforça, sempre traz os conceitos à luz de algo que interessaria uma pessoa ingressante na área de jogos, passa por muitos assuntos realmente relevantes como vetores, espaços de coordenadas, matrizes e transformações até a assuntos que não se estuda comumente no currículo comum do nível superior como curvas em 3D, coordenadas homogêneas e extensivos testes de interseção geométricas.
O livro peca em suas explicações, entretanto. Algumas partes possuem explicações desnecessárias, e em outras os fundamentos são deixados de lado ou a intuição não é construída.
Foi um livro que exigiu muita dedicação pois por diversas vezes eu tive que buscar material em outros livros ou sites para poder realmente entender do que se tratava. Os exercícios também costumam ser bem bobos.
Mesmo assim, é um livro que vale a pena ler nem que seja somente para saber quais assuntos você deve estudar e como eles são aplicados.
Veredito: 4 (de 0 a 5)
Obrigatório: Sim

Practical Linear Algebra: A Geometry Toolbox, Terceira Edição

Este livro é um excelente livro para ser lido logo após o 3D Math Primer. Todo o formalismo matemático e a falta de exercícios mais pesados que o livro anterior não possui este aqui tem de sobra, mas não se engane achando que a linguagem aqui não é acessível, pois ela é. Todo mundo sabe o que é ler um livro de matemática impossível de entender e com exemplos sem sentido.
Os autores optam por fugir do infame estilo maçante de definição, teorema e corolário, com tantos livros que utilizam esta abordagem é sempre bom encontrar algo um pouco mais formal que consegue fugir deste trio da destruição intuitiva. Praticamente todo o conteúdo aqui é utilizando no desenvolvimento de jogos e em particular na parte gráfica, ou seja, se você tem interesse em criar seus próprios shaders ou se aventurar na criação da parte gráfica de uma engine este livro é leitura obrigatória.
Poderia se aventurar um pouco na parte computacional de maneira mais explícita visto que o livro foi feito tanto para pessoas interessadas em aprender álgebra linear mais prática quanto como um preparatório para um curso de computação gráfica.
Veredito: 4 (de 0 a 5)
Obrigatório: Não, mas bastante recomendado

Geometric Algebra for Computer Science

Um assunto bastante novo que serve de alternativa à tradicional álgebra com matrizes. É realmente um livro de vanguarda em comparação aos outros que comumente são estudados, é uma teoria que se desenvolver como uma extensão da álgebra linear clássica e é comumente recebida como bastante prazerosa, consegue-se se abordar a geometria de 3 dimensões, em particular a rotação, sem ter que recorrer aos quase incompreensíveis quaternions. Eu ainda não terminei de ler este livro mas ele promete bastante.
Veredito: ? (de 0 a 5)
Obrigatório: Não

Desenvolvimento de jogos em geral

Provavelmente estes são os livros que mais vão lhe fazer se sentir um desenvolvedor (programador) de jogos de fato.

Game Engine Architecture

Tem sido o livro mais citado aqui no site e em muitos outros lugares. O autor possui extensa experiência real do campo e hoje trabalha como Programador Chefe na Naughty Dog. Apesar do livro ser extenso o nível de detalhe e a clareza com a qual ele passa os conceitos é fenomenal, um livro atual e que provavelmente vai se manter atual por muitos anos. Dificilmente você irá encontrar tantos tópicos do mais alto interesse do programador de engines e com tanta riqueza de detalhes escritos de maneira acessível do que este livro.
Mesmo que o principal foco seja para que está interessado em programar uma engine, o programador de jogos generalista também vai obter incríveis conhecimentos que vão lhe ajudar a obter o máximo de suas engines e também na implementação de subsistemas alternativos (fará isso por diversos motivos: performance, otimização de processo de trabalho, integração com outras ferramentas...) aos originais das engines escolhidas.
Veredito: 5 (de 0 a 5)
Obrigatório: Sim

Game Programming Patterns

Um outro livro também bastante citado, possui versão gratuita online. Também é usado como material fonte para os cursos que são dados no bladecast. Com uma abordagem parecida com o clássico livro de Design Patterns, este livro define e exemplifica diversas técnicas da programação de jogos que são bastante úteis em diversos tipos de jogos. Bastante didático e com vários diagramas, este livro pode ser lido e estudado do começo ao fim em um momento inicial para ser consultado inúmeras vezes em momentos futuros.
Veredito: 5 (de 0 a 5)
Obrigatório: Sim

Game Coding Complete, Primeira Edição

O livro é abrangente, faz jus ao nome. Mas não é um livro que vai te capacitar para desenvolver jogos de maneira alguma. É totalmente focado nas APIs do Windows o que pessoalmente pra mim é muito estranho.
Em muitas partes do livro ele simplesmente indica uma solução privada para algum problema e não chega nem perto de desenvolver o assunto de maneira adequada. Simplesmente não é um livro acessível onde deveria ser e passa muito tempo em alguns partes não técnicas, como o capítulo de milestones. Isso não é necessariamente ruim, mas para um livro que tem a palavra "coding" em seu título eu diria que ele não entrega o que prometeu.
A parte interessante do livro são as anedotas que o autor compartilha de sua árdua vida na série Ultima, você consegue sentir o peso da vida de um desenvolvedor AAA, realmente não é muito feliz.
Veredito: 2 (de 0 a 5)
Obrigatório: Não

IA

Tida pelos jogadores como algo cabuloso, a IA de jogos é muito especializada e simplificada em relação à IA de uso comum nas outras indústrias.

Programming Game AI by Example

Apesar de ter este título e capa genérica não se deixe enganar, este é facilmente um dos melhores livros sobre o assunto. Eu já o utilizei para implementar a inteligência artificial de um jogo chamado Connect 4, o clássico jogo da velha e diversas pequenas inteligências artificiais em jogos como pacman.
E muito além disso, este livro ensina de maneira bastante clara implementação de movimentação de agentes autônomos como seguir, fugir, perambular. Tem um capítulo inteiro dedicado a uma simples implementação de IA de futebol, explica também os métodos mais utilizados em desenvolvimento de IA de jogos da área de grafos, algoritmos esses que são usados tanto em navegação em cenários (path finding) até em jogos como match 3s, entre outros assuntos muito úteis e interessantes.
A leitura é boa, os conceitos são passados com a profundidade que os assuntos necessitam sem nunca deixar o leitor perdido ou demasiadamente cansado. Quem dera os livros técnicos fossem como este.
Veredito: 5 (de 0 a 5)
Obrigatório: Sim, totalmente.

Computação Gráfica

A área queridinha de muita gente. Costuma ser também a área mais desafiadora e enigmática. Mas com boas leituras e um estudo planejado através de mini projetos a computação gráfica pode ser desvendada.

Real-Time Rendering, Third Edition

Leitura obrigatória para quem quer entender como programar shaders e não somente shaders mas aplicações com rendering em real time (jogos?). O livro é acessível, divertido e cheio de exemplos interessantes. Uma perfeita introdução para quem quer cair de cabeça nesse mundo da programação gráfica moderna, mesmo sendo de 2008. Além de rendering e efeitos visuais em si o livro trata de ferramentas que são essencias para aqueles que pretendem criar aplicações de alta performance como culling, estruturas de dados espaciais, otimização do uso do pipeline gráfico, entre outros.
Veredito: 5 (de 0 a 5)
Obrigatório: Sim

Fundamentals of Computer Graphics, Fourth Edition

Fuja deste livro, ele é péssimo. O que mais me impressiona neste livro é a quantidade de professores que o usam como livro-texto. A probabilidade de alguém se perder nos conceitos apresentados já nas primeiras três páginas é enorme. A matemática é incrivelmente densa e a parte prática é muito corrida e essencialmente inútil. Você vai precisar pesquisar muito os porquês das coisas que são apresentadas e explicações para os conceitos mais difíceis como a função de distribuição de reflectância bidirecional, a própria equação da computação gráfica ou até mesmo coisas mais simples como o funcionamento da matriz de projeção.
Veredito: 0 (de 0 a 5)
Obrigatório: Não

Perguntas/Queries relacionadas
  • Recomendação de livros sobre desenvolvimento de jogos
  • Recomendação de livros sobre programação de jogos
  • Livros de matemática para jogos
  • Como aprender computação gráfica

quarta-feira, 2 de agosto de 2017

Mas Java? C++ não é a melhor linguagem para jogos? E C#?

Repost de https://bladecast.pro/programacao/java-vs-c++-para-desenvolvimento-jogos

Se você está lendo este artigo, pelo menos está considerando a possibilidade de programar jogos em Java em detrimento à escolha padrão da indústria, C++. E está com dúvidas se ao fazer isto você está perdendo o seu tempo. Lhe adianto que não. Mesmo que C++ seja a linguagem padrão para fazer os famigerados jogos AAA, você, que está começando a programar jogos não vai ter 1/1000 das preocupações que essas pessoas precisam ter.
Vou lhe dizer porque Java é uma excelente escolha, lhe mostrar os casos de sucesso e apontar quais são as vantagens e desvantagens de C++ vs Java. Também vou abordar brevemente C#, outra linguagem que ficou muito popular no mundo do desenvolvimento de jogos.
Como dito na introdução, os jogos AAA de hoje tem certas características simultâneas como:
  • 60fps 
  • 2kk+ de polígonos na tela 
  • IA
  • Física
  • Partículas
  • Lag compensation
  • Art asset streaming
Não que os seus jogos não vão ter estas características também, mas em geral não é preciso exigir tanto da máquina como em jogos AAA. E pra isto, para se chegar no topo do topo da performance, C++ ainda é a escolha fácil e adequada. 
Outras alternativas como Rust estão chegando ao mercado, mas ainda são muito incipientes e não são compatíveis com todos os consoles, além de que a indústria já se acostumou com C++, é mais fácil contratar e os programadores mais experientes (sofreram bastante, lhe garanto) conseguem dobrar a linguagem para todo tipo de uso.
Pra começar a puxar a sardinha pro lado do Java, é importante ressaltar que pouquíssimos jogos são feitos 100% em C++, quase todos os jogos utilizam alguma linguagem de script como Lua (orgulho nacional) para ganhar flexibilidade e velocidade na implementação do código de gameplay.

Mas você não precisa acreditar em mim. Confira os jogos mais famosos feitos com Java para tirar de vez a dúvida que é possível fazer jogos de alta performance e grande popularidade com a linguagem.

Runescape™
Runescape™
Wurm Online™
Wurm Online™
Spiral Knights™
Spiral Knights™
Altitude™
Altitude™
Operation Storm Front™
Operation Storm Front™
Age of Conquest III™
Age of Conquest III™
Minecraft™
Minecraft™
Para quem precisa de um caminho um pouco mais técnico, vamos ver alguns benchmarks em relação ao uso de CPU, memória e tempo de execução de alguns programas (no sentido do dicionário) clássicos.
Benchmarks Java vs C++
Benchmark Java vs C++
Nestes 4 programas, vemos que Java ganha em tempo de execução em apenas um, mas isso mostra que mesmo a linguagem sendo considerada mais lenta, dependendo do jeito que é utilizada, a JVM pode ter um desempenho excelente. Fonte dos benchmarks.

Existem alguns problemas de performance que costumam acontecer com frequência, são os chamados performance bottlenecks, ou em português, os famosos gargalos. 

Em um típico pipeline gráfico, a geometria é armazenada em algum lugar do disco, é carregada e mínimamente processada pela CPU e despachada para a GPU, mesmo que exista uma ligação direta entre a RAM e a GPU, a CPU costuma se envolver nesse processo de alguma maneira. Depois que os dados chegaram na GPU, em teoria, não importa mais a linguagem de programação que está sendo usada, já que agora ta mão dos shaders, da placa e do driver responsável pelas operações gráficas. E é neste momento que sim, é preciso muitos truques para não deixar Java te atrapalhar, pois quando estamos lidando com buffers nativos de memória, Java realmente não lhe da o controle completo que você pode precisar. Para mais detalhes acesse este artigo da intel sobre o assunto e este artigo sobre NIO Buffers em Java. 
Um outro problema, também relacionado a memória, é a presença do coletor de lixo (garbage collector), isso é um problema e ao mesmo tempo uma grande vantagem da linguagem já que você não precisa se preocupar tanto assim em fazer a limpeza dos seus objetos depois de criados. Porém, isto não costuma ser verdade para o desenvolvimento de jogos, você vai querer sim ter um controle sobre os recursos e libera-los a medida que não forem usados, fazer reciclagem de objetos e vários outros tipos de técnica para evitar de precisar alocar mais memória e evitar que o GC tenha que trabalhar.

Antes de atacar C++ é importante lembrar os motivos da linguagem estar sendo usada até hoje. 

Primeiro de tudo, ela é o padrão da indústria. Estúdios grandes sabem gerenciar projetos C++, eles sabem avaliar candidatos C++, eles tem muita tecnologia feita em C++, existem gazilhões de linhas de código feitas em C++, toda a indústria AAA gira em torno de C++, quebrar esse ciclo é muito difícil.
E o que existe de tão ruim e difícil em C++? Muitos diriam que o gerenciamento de memória é o que torna C++ tão difícil, mas eu não tenho essa opinião, para mim, existem algumas técnicas em C++ como o uso correto de construtores e destrutores (também conhecido, bizarramente, como RAII) alocando sua memória na pilha sempre que puder, caso precise usar a heap, o uso do unique_ptr (C++11) é bem efetivo. 
Uma característica que costuma tirar as pessoas do sério no uso de C++ é a sua falta de um sistema de pacotes como o npm do node.js ou até mesmo o Maven do Java, ter que manter arquivos de header também é algo extremamente improdutivo e o tratamento pobre e confuso de strings. Para entender o que estou querendo dizer com as strings dê uma olhada na resposta mais votada do stackoverflow em uma pergunta sobre fazer o split de uma string.
istringstream iss(sentence);
copy(istream_iterator(iss),
     istream_iterator(),
     ostream_iterator(cout, "\n"));
Na minha opinião, isto é um sofrimento muito grande para fazer uma coisa tão comum. Compare com Java ou Javascript
str.split(“…”);
É claro que não fiz um exame minucioso sobre todas as operações mais comuns em strings e um de para de C++ para outras linguagens, mas creio que fica claro que seria interessante poder importar facilmente bibliotecas de string em C++ para resolver esses problemas. Só que importar bibliotecas em C++ não é fácil. A coisa é tão chata que um estilo de bilbioteca, single header file libs, foi criado.
Enfim, com o tempo, e em um projeto maior, esses problemas que levantei vão sendo amortizados, mas para quem está apenas estudando programação de jogos ou quer atacar um projeto pequeno, essa perda de produtividade de C++ é realmente um problema que não pode ser ignorado.
Falamos sobre a linguagem em si e um possível sistema de pacotes, mas e o resto ferramental? Esta também é uma área que C++ peca bastante. Com a recente chegada de CLion da Jetbrains isso está mudando de figura, mas Java oferece IDEs mais amigáveis há bastante tempo como o eclipse que realmente te ajudam em tarefas como refatorações. Os compiladores C++ também costumam emitir mensagens de erro ininteligíveis, principalmente se você estiver trabalhando com templates. 
Para não ser cretino, todos esses problemas que eu levantei do C++ estão sendo atacados pelos comitês que a dirigem. Em alguns anos, 5, 8? É possível que C++ realmente chegue a um nível de produtividade em questão de expressividade da linguagem e ferramental impressionantes, mas até lá… Quem precisar usar C++ vai ter que aprender todos as suas mãnhas.

Um outro elefante branco na sala das discussões de qual linguagem usar para programar jogos é o C#. 

Desde que introduzida nesta área pela Microsoft com o XNA (agora falecido) ela vem tomando espaço. Com a chegada da Unity, a popularidade da linguagem explodiu. Em termos de linguagem, C# é realmente uma linguagem moderna e não sofre de nenhum mal dos que eu citei para C++. O problema realmente é do ambiente que a hospeda. Unity é uma ferramenta fantástica, mas se você está apenas começando, quer fazer jogos 2D, e quer ter mais controle sobre o seu programa em execução, Unity não é a ferramenta adequada. Eu diria que frameworks como Libgdx vão lhe ajudar muito mais para aprender os fundamentos de maneira profunda do que a Unity.

Com isso tudo, vou dizer pra vocês

É claro, sendo um artigo de opinião que desde o título já mostra suas intenções, que Java é uma linguagem de programação perfeitamente adequada para se programar os mais variados tipos de jogos, principalmente se você estiver começando e não quer perder seu tempo lidando com todas as idiossincrasias de C++. E nos dias de hoje, onde temos bibliotecas e frameworks excelentes como a Libgdx, pode seguir tranquilo com o Java.


Perguntas/Queries relacionadas
  • Java vs C++?
  • C# vs Java
  • Da para fazer jogos em Java?
  • Exemplos de jogos feitos em Java

quinta-feira, 24 de novembro de 2016

List of books and online courses to learn computer graphics programming. A.K.A. How to be a rendering engineer

Rendering Engineer Path


  1. 3D Math Primer for Graphics and Game Development
  2. http://learnopengl.com/
  3. Graphics Codex
  4. Computer Graphics, Fall 2009 (UC Davis) https://www.youtube.com/playlist?list=PL_w_qWAQZtAZhtzPI5pkAtcUVgmzdAP8g
  5. Ray Tracing Minibooks Book 1
  6. http://fabiensanglard.net/rayTracing_back_of_business_card/index.php
  7. Ray Tracing from the ground up
  8. Real-Time rendering book
  9. http://www.pbrt.org/
  10. Real-Time Shadows book

segunda-feira, 21 de novembro de 2016

Tutorial: Como mostrar texto limpo, sem borrões e com efeito de stroke usando Libgdx

(repost de https://bladecast.pro/programacao/tutoriais/fonte-com-efeitos-libgdx

Exemplo de fonte com efeito
Exemplo do que você vai construir ao terminar este tutorial
Uma coisa que quase todos os jogos precisam fazer é exibir alguma forma de texto, nem que seja um número voando que represente os pontos ou dano infligido. E fazer isto no Libgdx poderia ser uma tarefa um pouco mais fácil, principalmente se você quiser incrementar e colocar efeitos como stroke e gradient fill em seus textos.
O processo é um pouco tedioso mas é certeiro. Um jeito de se fazer isso é o seguinte:
  1. Customizar a aparência da fonte usando a ferramenta Littera
  2. Exporta-la em formato bmf e copia-la para o projeto
  3. Instanciar o objeto BitmapFont no projeto e desenhar a fonte no método render()
Vamos aos passos.

1. Gerar a fonte em formato fnt usando a ferramenta Littera

Littera é uma ferramenta online que vai exportar uma fonte de formato comum (TrueType® OpenType®) para formato bitmap font. Comece acessando o site onde a ferramenta se encontra kvazars.com/littera/
Site littera
Interface da ferramenta Littera com a fonte padrão carregada
A ferramenta tem um design simples e direto, quem usa Photoshop vai se sentir em casa. Escolha a fonte e tamanho que você quer usar em seu jogo na seção Font através do grande botão Select Font.
Utilize o maior tamanho que a fonte vai ser usada no jogo, isto vai fazer com que a sua fonte não seja renderizada com aparência borrada.
Para economizar no tamanho do download final do seu jogo, se possível, restrinja os caracteres, aqui chamados de glyphs, aos que você vai usar, você pode fazer isso na seção anterior à seção de fonte. Alguns conjuntos mais usados podem ser rapidamente escolhidos no dropdown da seção.
Agora você vai escolher os efeitos que deseja em seu texto. Todas as alterações são demonstradas em tempo real.
"E se eu quiser a mesma fonte aparecendo com diferentes estilos?"
Infelizmente, se você quer que essa mesma fonte apareça, por exemplo, com e sem stroke, você vai precisar repetir todo esse processo.

2. Exporta-la em formato bmf e copia-la para o projeto.

Com todas as preferências visuais ajustadas, você precisa agora exportar a fonte em um dos formatos Text, a extensão é indiferente.
Site littera
Formato XML .fnt selecionado
Pronto. Clique em Export e depois em Start. Não é preciso alterar os valores padrões. Você vai baixar um arquivo zip. Ele vai conter um arquivo .fnt e um arquivo .png, copie estes arquivos para a pasta assets do módulo android de seu projeto.
Árvore de diretórios
Coloque os arquivos dentro do módulo android nome-projeto/assets

3. Instanciar o objeto BitmapFont no projeto e desenhar a fonte no método render()

É preciso instanciar um objeto da classe BitmapFont para poder usar a sua fonte. Em create() utilize o seguinte código para criar o objeto, substituindo (NOME_DA_SUA_FONTE) pelo nome real do arquivo que você gerou.
bitmapFont = new BitmapFont(
               Gdx.files.internal("(NOME_DA_SUA_FONTE).fnt"),
               Gdx.files.internal("(NOME_DA_SUA_FONTE).png"),
               false);
Para ser um bom cidadão do ambiente do sistema operacional Android e não causar vazamentos de memória é importante que se desfaça da fonte no método dispose()com uma simples chamada ao método homônimo do objeto bitmapFont
bitmapFont.dispose();
Finalmente você poderá escrever usando a sua fonte! Dentro do método render(), chame
bitmapFont.draw();


Perguntas/Queries relacionadas
  • como texto libgdx
  • fonte efeitos libgdx
  • fonte libgdx limpa
programando-jogos-android.netlify.com

Programando Jogos Android usando Libgdx

Em um projeto paralelo estou escrevendo um livro sobre o desenvolvimento de jogos Android utilizando a biblioteca LibGDX, confira

https://bladecast.pro/programacao/zero-ao-tetris-java-libgdx

Do Zero Ao Tetris
Como criar 4 jogos clássicos com Java para Android


Você entrou na faculdade de ciência da computação, sistemas de informação, engenharia de computação, aprendeu tudo que você queria e não queria sobre Java, UML, cálculo, engenharia de software... mas no fundo, no fundo, você sempre quis fazer jogos?
Ao se deparar com as ferramentas de hoje você se sente perdido? Com muitas opções? Não sabe se investe o seu tempo em C++? UE4Unity? São tantas escolhas a serem feitas que muitas vezes acabamos não fazendo nenhuma.

É possível começar a programar jogos para Android usando ferramentas simples que vão fundamentar o seu conhecimento como desenvolvedor de games.

Eu lhes sugiro e apresento Libgdx. Uma ferramenta de alto nível, mas nem tão alto assim, onde você vai poder usar tudo que você já aprendeu sobre programação até agora, desde a tríade clássica js+php+sql, passando por Java e whatnot.
Onde está a minha main() ?
Qualquer aluno de computação quando se depara com os frameworks e engines atuais de desenvolvimento de jogos
Neste livro, particularmente voltado para quem tem conhecimentos básicos sobre programação mas se sentiu assustado com as inúmeras opções e, inclusive, barreiras da complexidade inerente do desenvolvimento de jogos, um caminho claro e com várias oportunidades de aprofundamento vai ser apresentado.
Gameplay de Space Invaders™
Space Invaders™
Um clássico que você irá programar

Conceitos Ensinados no Livro

  1. O Game Loop
  2. Estrutura do Framework Libgdx
  3. Uso de Spritesheets
  4. Interpretação de comandos do usuário
  5. Colisão Básica
  6. Como reproduzir Som/Sfx e músicas
  7. Uma introdução à máquinas de estados
  8. GUI
  9. Object Pool
  10. Detecção de fim de jogo e recomeçar nível
  11. Dimensionamento de telas (viewports)
  12. Simulação de cinemática básica
  13. Implementação de regras de puzzle
  14. Persistência para criação de highscore boards
  15. Exportar para o Android

Primeiro passos por exemplos.

Todo conceito passado no livro é acompanhado de um exemplo real. Não queremos que você ache que estamos lhe enrolando. Uma recomendação é que você vá além do exemplo e implemente suas próprias ideias com os conceitos que você for aprendendo durante a leitura do livro, isto que será bacana.
Gameplay de Snake™
Snake™
Mais um clássico que você irá programar

Arte incluída para você focar somente na programação.

Nosso artista, Pedro Martins, criou todos os assets dos jogos que você irá criar, assim você vai poder focar somente nas mecânicas, códigos, lógica de programação e uso do framework.
Toda arte usada nos exemplos será livre de royalties e facilmente obtida no momento em que você adquirir o livro.

O livro será assim:

  1. Introdução
    1. Usando Libgdx em um mundo pós Unity
    2. Mas Java? E a performance?
    3. Instalando Android Studio
    4. Instalando Libgdx
    5. Criando um projeto Libgdx
  2. Space Invaders™ Lv. 1
    1. O Game Loop
    2. Estrutura do Framework
    3. Como organizar seu Projeto
    4. Uma imagem na tela
    5. O que são spritesheets e como usa-las
    6. Lendo o input do usuário
    7. Atirando projéteis
    8. Colisão 1
    9. A morte de um inimigo
  3. Pong™
    1. Dimensionamento de viewport
    2. Reprodução de Sfx
    3. Colisão 2
    4. Refletindo a bolinha
    5. Condição de fim de jogo e Reinício
    6. Desenhando fontes
  4. Snake™
    1. Detecção de gestos
    2. Items coletáveis
    3. Desafio #1 de Game Design
    4. GUI de Menu Inicial
  5. Space Invaders™ Lv. MAX
    1. Object Pool
    2. PowerUp de Arma
    3. Introdução à Máquinas de Estados
    4. Inimigos com personalidade
    5. Seu primeiro chefão
  6. Tetris™
    1. Encarando um jogo complexo
    2. Reprodução de músicas
    3. O giro da peça
    4. Pensando em turnos
    5. O bônus multi-linha
    6. Desafio #2 de Game Design
  7. FINAL
    1. Assinando um APK
    2. Publicando na PlayStore

Ok. Onde está esse livro?

Se você se interessou pelo livro, quer receber gratuitamente o fonte e o primeiro capítulo de um dos jogos, ou tem qualquer dúvida sobre como iniciar os seus estudos no vasto mundo da programação de jogos para android, inscreva-se já na nossa lista de email. Prometo que só enviarei conteúdo que vai lhe interessar.