Introdução ao desenvolvimento de games, volume 2
A série Introdução ao desenvolvimento de games da editora Cengage Learning possui 4 volumes traduzidos e publicados no Brasil, e neste post vou falar sobre o Volume 2: Programação: técnica, linguagem e arquitetura.
Eu tive uma feliz surpresa ao ler o primeiro volume desta série sobre game design, que você pode conferir aqui. E neste segundo volume foi diferente, a surpresa foi ainda maior! O livro, organizado pelo Steve Rabin, contou novamente com a colaboração de diversos profissionais da indústria de games AAA.
Por isso, muitos assuntos abordados no livro são tratados com a visão de desenvolvedores de jogos AAA, bem como suas preocupações e técnicas. Não podemos deixar de lembrar que este livro é uma introdução à programação de jogos, então muitas coisas são bem básicas. Alguns assuntos parecem empolgantes no sumário, mas o conteúdo é bem básico e as vezes tem apenas um parágrafo. Porém, isso não diminui o valor do livro, que deve ser lido como um primeiro passo para trabalhar com jogos profissionalmente.
O livro é divido em três partes, e a primeira trata linguagens de programação e arquitetura. Embora as demais partes sejam muito importantes, esta primeira é a que faz toda diferença neste livro. Design patterns são explicados com exemplos em jogos, e inclusive com vantagens e desvantagens de cada padrão e a parte de arquitetura é algo que eu busquei em muitos livros e apenas neste encontrei uma forma clara de explicar alguns tipos principais para jogos.
Existe também um capítulo inteiro sobre gerenciamento de memória, que é importante mas existem muitos livros sobre isso. O mais impressionante pra mim, que é essencial para qualquer programador, é um capítulo dedicado a depuração de código, ou debug. Eu achei incrível por que o livro apresenta diversas técnicas que eu aprendi nos anos que trabalhei na Electronic Arts e na Glu Mobile, e isso tudo aprendo sozinho ou alguém me explicou, nunca tinha lido um livro que tivesse este tipo de informação. Em muitos casos, não basta apenas saber programar, tem que saber resolver problemas no código.
Sobre esta primeira parte tenho dois comentários negativos. Em alguns momentos a tradução e a revisão deixaram passar textos sem sentido, como “reinicializarão a quente”, que não é explicado. Outro ponto é sobre uma parte do conteúdo que fala sobre C++ como sendo algo muito difícil de usar e apresenta o Java como uma solução incrível que a indústria estaria adotando por ser mais fácil. Isso não é verdade, pois por mais que jogos Indie como o Minecraft usem, jogos AAA e de iOS sempre são feitos em C++ (ou Objective-C no caso do iOS) pela vantagem de usar o mesmo código em mais de uma plataforma. Não faz sentido usar Java se você quer publicar seu jogo em mais plataformas, use sempre C++ e não tenha medo de aprender a programar com esta linguagem.
A segunda parte sobre matemática e física é também uma ótima introdução, pois muitas coisas são apresentadas bem resumidas, porém com explicações de uso em jogos. Por mais que seja básico, vale a pena entender como usar essas coisas em jogos antes de se aprofundar com outros livros mais direcionados. O capítulo sobre detecção de colisão merece um bom destaque, pois está é uma técnica muito usado e sempre da problemas.
Por fim, na terceira parte, temos assuntos mais avançados como inteligência artificial, gráficos, áudio e rede. Aqui está outra parte diferenciada do livro, o capítulo sobre computação gráfica e principais técnicas. Este capítulo é uma introdução e um resumo de muita coisa essencial, que é o funcionamento da pipeline gráfica e como tudo é renderizado pelo hardware. Ler este capítulo pode te fazer entender muitos problemas que acontecerão na programação do seu jogo, mas não deixe de se aprofundar no assunto com outros livros.
A inteligência artificial tem dois capítulos, um fala de maneira geral e até resumido demais, porém o outro é dedicado a principal técnica usada em jogos, o path finding. Entendendo como usar esta técnica, você provavelmente mudará muitas coisas no seu código para melhorar a inteligência dos seus NPCs. Existem muitos livros bons sobre este assunto, mas está é uma ótima introdução também.
O capítulo final é algo que muitos programadores fogem, pois temem até mais do que física e inteligência artificial ou acham que é muito fácil, que é programação em rede. Prever e otimizar um código para um hardware já é algo complexo, agora fazer isso em rede é ainda mais complicado, pois existem coisas impossíveis de prever, mas que necessitam de um código flexível e robusto. Programar em rede é mais do que enviar e receber pacotes com dados, e muitos conceitos e técnicas sobre este assunto são tratados nesta parte final do livro. Fiz um jogo em rede uma vez na pós-graduação, e foi ao mesmo tempo divertido e complicado.
Se você leu o post inteiro vai perceber que este é um livro essencial para qualquer programador que quer desenvolver jogos. Ele é básico como o primeiro livro da série, mas para começar a entender como é programar jogos é perfeito, e este é o foco do livro. Mesmo quem já trabalha na área pode aproveitar muito do livro, pois todo conteúdo foi produzido por pessoas que trabalham na indústria de jogos lá fora, que é bem diferente daqui. Muito obrigado a editora Cengage Learning por me enviar este volume!
Siga a Cengage Learning no Facebook e no Twitter para ficar por dentro dos lançamentos da editora.