Java no desenvolvimento de jogos Escrito por Vinícius Godoy de Mendonça Seg, 12 de Outubro de 2009 02:53 - Última atualização Seg, 12 de Outubro de 2009 02:53 Por que Java para o desenvolvimento de jogos? O Java tornou-se uma das linguagens mais populares nos últimos anos, então, é natural que muitos se perguntem se ela é ideal para o desenvolvimento de jogos. Ela conquistou rapidamente mercado nos jogos de celular e obteve seu espaço na internet. Mas seria o Java adequado para jogos 2D ou 3D? Nesse artigo, exploraremos algumas das vantagens e desvantagens do Java nesse mercado. Pontos positivos Abrangência Graças a virtual machine (VM), o Java está presente em todos os principais sistemas operacionais: MacOS, Linux e Windows. Não só isso, o Java infiltrou-se fortemente no mercado de jogos para celular, possuindo inclusive acesso as tecnologias 3D para os dispositivos móveis. Sua presença nesse mercado é tão forte, que hoje são poucos os fabricantes que não disponibilizam uma VM, e são menores ainda o número de desenvolvedores que desejam criar jogos móveis usando as APIs nativas dos aparelhos. O Java também está presente na Internet, embora de maneira não tão forte quanto o ActionScript/Flash. Por lá, podemos contar com duas tecnologias: os java applets, que permitem a execução da aplicação diretamente do navegador, quanto o JNLP, que permite a execução de um jogo na plataforma local (você pode ver um exemplo de JNLP em ação ness 1/7 Java no desenvolvimento de jogos Escrito por Vinícius Godoy de Mendonça Seg, 12 de Outubro de 2009 02:53 - Última atualização Seg, 12 de Outubro de 2009 02:53 a página . Basta clicar em play now!). É possível, e fácil, desenvolver jogos 2D e 3D em Java, para o desktop. Entretanto, não podemos dizer que é uma opção comum. O mercado de jogos triplo A exige otimizações extremas, e boa parte das produtoras já tem uma gigantesca base instalada em C++, sendo difícil para eles uma mudança nessa altura do campeonato. Um exemplo de jogo grande feito em Java é o brasileiríssimo Taikodom . Além disso, muitos não entrarão na indústria de jogos imediatamente, ou nunca entrarão. Seja por opção, ou pela falta dela, não se pode negar que é interessante dominar uma linguagem que também está fortemente presente na indústria de software. O Java tornou-se uma das principais opções no desenvolvimento comercial hoje, e já vem ganhando espaço em aplicações industriais. O Java também não se restringe a linguagem Java. Sobre a VM, rodam diversas outras linguagem como o Groovy e o JRuby . Isso permite a inclusão de scripts no seu jogo de uma maneira muitíssimo mais transparente e poderosa do que em C++. Facilidade O Java pode não ser tão fácil quanto uma linguagem de script, mas é certamente muitíssimo mais fácil do que o C++. Por livrar o programador de diversos detalhes sobre a gerência de memória e da plataforma de hardware, o código Java fica limpo, sendo fácil para qualquer programador entendê-lo e estudá-lo. Por isso. O programador Indie, que só quer fazer jogos por diversão, pode encontrar no Java um 2/7 Java no desenvolvimento de jogos Escrito por Vinícius Godoy de Mendonça Seg, 12 de Outubro de 2009 02:53 - Última atualização Seg, 12 de Outubro de 2009 02:53 ambiente muito mais prazeroso, sem a presença de diversos bugs extremamente estressantes do C++. Tal como o C++, o Java possui um número gigantesco de bibliotecas e, geralmente, será mais fácil instalá-las e anexá-las ao seu projeto do que as feitas em C++. O problema do C++ é que muitas bibliotecas não virão compiladas, sobrando para o programador a tarefa nem sempre fácil de encontrar um compilador, montar corretamente o makefile, e compilá-las. Em muitos casos, é necessário instalar o Visual C++, da Microsoft, só para essa tarefa, mesmo que você tenha optado por usar outro compilador. As IDEs feitas para o Java também costumam a ser poderosas, robustas e completamente gratuitas. A maioria trás anexadas ferramentas como profilers (para testar identificar gargalos de performance e monitorar consumo de memória), simuladores de telefones, suporte aos testes unitários, entre outras coisas. Comunidade ativa e aberta É fácil aprender Java hoje em dia. Há inúmeros sites na internet explicando a linguagem, livro s e apostilas gratuitos, tutoriais e material didático de boa qualidade. O Java também é ensinado na maior parte das escolas técnicas e faculdades. É difícil encontrar bibliotecas Java com ausência total de documentação, exemplos, ou com código fechado. Os fóruns de nacionais java são movimentados e geralmente suas dúvidas são resolvidas em questão de minutos. 3/7 Java no desenvolvimento de jogos Escrito por Vinícius Godoy de Mendonça Seg, 12 de Outubro de 2009 02:53 - Última atualização Seg, 12 de Outubro de 2009 02:53 A comunidade também produz todo tipo de ferramenta, geralmente de maneira aberta ou gratuita. A própria gestão da Sun sobre a linguagem, através do Java Community Process , acaba sendo feita de maneira muito mais aberta e transparente do que seu principal concorrente, o C#. Discutem adições na linguagem, APIs e na IDE mantida pela Sun, o Netbeans . Há colaboração em todos os sentidos. Suporte nativo O Java possui suporte nativo para janelas, gráficos 2D, som, threads, rede, mouse e teclado. Portanto, é possível montar excelentes jogos 2D sem anexar uma única biblioteca externa sequer. Assim, tanto o ambiente de desenvolvimento, quanto o jogo em si, tornam-se facílimos de serem instalados e mantidos. Desvantagens Nem tudo é perfeito. Com o Java, não poderia ser diferente. Exploremos agora alguns dos problemas da linguagem, no que tange o desenvolvimento de jogos. Baixa integração com o sistema operacional Ser multi-plataforma tem um custo: sua aplicação fica encapsulada numa VM e, por conseqüência, fica isolada do sistema operacional. O problema é que bibliotecas gráficas como OpenGL e DirectX, suporte aos controles mais modernos, dependem dessa funcionalidade. Isso não significa que ela seja inexistente em Java. É possível implementá-las em código nativo e integrá-las, através da JNI . Entretanto, esse é um desenvolvimento essencialmente feito em C++, e pode ser até mais difícil do que se você o fizesse seu jogo em C++ diretamente. Felizmente, a comunidade já se preocupou em resolver a maior parte desses problemas. Encontramos bindings para OpenGL e para controles. A JOGL , LWJGL e o JInput são alguns exemplos. Não se pode negar, entretanto, que existe sempre um gap entre o lançamento de uma nova tecnologia, e seu suporte na linguagem Java. Muitas vezes, também pode ser difícil encontrar uma biblioteca estável, que te permita trabalhar com determinada tecnologia, como é o caso do DirectX. Outra desvantagem é que muitas dessas bibliotecas não são multi-plataforma, eliminando 4/7 Java no desenvolvimento de jogos Escrito por Vinícius Godoy de Mendonça Seg, 12 de Outubro de 2009 02:53 - Última atualização Seg, 12 de Outubro de 2009 02:53 assim uma das principais vantagens de se usar Java. Não é usada na indústria de jogos AAA Embora esteja presente em celulares e internet, não podemos negar que ele é inexistente na indústria de jogos triplo A. E as perspectivas não favorecem uma mudança desse quadro, já que a indústria de consoles orgulha-se justamente de seu hardware diferenciado. Graças a isso, dificilmente ouviremos a Microsoft e a Sony preocupadas em criar uma virtual machine que permita rodar jogos em Java de maneira homogênea em seus consoles. Por conseqüência, isso mantém o Java afastado dos jogos desse gênero até mesmo no PC, uma vez que a maior parte dos estúdios tem interesse em porta-los, ou pretende ter rotatividade entre os membros de diferentes equipes. Sem falar no fato já citado da indústria já ter uma grande base instalada de aplicativos e bibliotecas escritos em C++, além de pessoal já qualificado e know how. Então, se sua meta é essa indústria, custe o que custar, por que perder tempo desenvolvendo em Java? Essa é uma boa pergunta. Felizmente, nosso site também tem uma sessão dedicada ao C++. Exige a instalação da VM Para o uso das versões mais modernas do Java, o usuário precisa instalar o Java Runtime Environment (JRE). Essa instalação é um pouco mais complexa do que a do flash, embora se resuma aos famosos “next, next, next” dos instaladores comuns. O usuário, entretanto, precisa fazer o download, e executar um aplicativo externo, e muitos desconfiam dessa operação, ou a temem. Não é à toa que alguns estúdios, como o miniclip , dão preferência para jogos feitos em versões muito antigas do Java, como a 1.1 ou 1.2 compatíveis com a Microsoft Virtual Machine, já integrada nas instalações de Windows. Felizmente, a presença do Java nas máquinas é cada vez mais comum, graças a pressão feita pelos bancos e por softwares do governo. 5/7 Java no desenvolvimento de jogos Escrito por Vinícius Godoy de Mendonça Seg, 12 de Outubro de 2009 02:53 - Última atualização Seg, 12 de Outubro de 2009 02:53 Fácil de descompilar Descompilar um código Java é muito mais fácil do que decompilar o mesmo código escrito em C++. As aplicações para isso, como a cavaj , geram um código tão legível que chega a ser desconcertante. Mesmo com o uso de ofuscadores, como o ProGuard , essa não será uma tarefa muito difícil para quem estiver realmente determinado a fazê-lo. Portanto, se você pretende manter um segredo industrial forte e não acha que o know how de sua equipe é suficiente para manter você na liderança, não use Java. E a performance, não é um problema? É difícil comparar a performance de uma aplicação Java com uma aplicação C++. Para um pequeno código estritamente matemático, será fácil comprovar que o C++ tem performance superior a do Java. Entretanto, ao entrar em estruturas mais complexas, como alocação de memória, a comparação começa a se tornar difícil. Um exemplo disso, é o fato do coletor de lixo ser muito mais inteligente do que o C++ na hora de alocar e desalocar memória. Criar objetos pequenos ou temporários ou lançar exceções em C++, por exemplo, costuma a ser uma tarefa extremamente custosa. No Java, essas são tarefas praticamente gratuitas. Outro conceito errado é que o Java é uma linguagem integralmente interpretada. Primeiro, mesmo que haja interpretação por parte da VM, devemos lembrar que o código interpretado é de um bytecode compilado, e não de um código fonte textual. Portanto, a VM não precisará perder tempo fazendo verificações sintáticas e o código está otimizado, permitindo uma interpretação leve e rápida. 6/7 Java no desenvolvimento de jogos Escrito por Vinícius Godoy de Mendonça Seg, 12 de Outubro de 2009 02:53 - Última atualização Seg, 12 de Outubro de 2009 02:53 Além disso, a virtual machine usa uma técnica chamada Hotspot Compilation , Essa técnica analisa o código em tempo de execução, permitindo assim uma compilação seletiva dos pontos mais “quentes” de sua aplicação. Como a compilação conta também com informações de runtime, a VM pode fazer otimizações ainda mais agressivas do que as que seriam possíveis usando C++. Um exemplo disso, é que mutexes são eliminados da compilação, caso a VM identifique que há apenas uma thread rodando. Outro exemplo é que é possível para a VM eliminar chamadas a métodos vazios, mesmo em classes polimórficas. Finalmente, é bom citar que o Java possui ferramentas de excelente qualidade para verificar a velocidade do código fonte e o consumo de memória, um exemplo é o VisualVM , integrado ao próprio JDK. Como a VM pode disponibilizar diversas informações sobre a execução da aplicação, pode-se instrumentar código java de maneira não-intrusiva, isto é, você pode acompanhar seu código sem a necessidade de alterá-lo. Como a maior parte dos gargalos de performance não estão na execução do código nativo por si só, será mais fácil otimizar código Java do que código C++. Concluindo Esse artigo apresentou diversos pontos positivos e negativos da tecnologia Java. Se você tem interesse em fazer jogos por lazer, ou deseja entrar no mercado de celulares ou web, o Java certamente é uma opção melhor que o C++. Com a tecnologia Java, é muito mais fácil fazer jogos de boa qualidade, sejam usando tecnologia 3D, 2D ou móvel. Mesmo que você queira investir para valer na indústria hardcore, o Java pode ser uma boa opção antes de você entrar lá. Tanto para o estudo das técnicas de programação em si, simplificado pelo fato da linguagem te poupar de detalhes de baixo nível, quanto pelo fato dele estar mais presente no mercado comercial, representando assim uma linguagem rentável. Apresentaremos artigos nas duas linguagens, escritos por profissionais experientes. Agora, só cabe a você escolher quais deles seguir. 7/7