Esta semana andei repensando um pouco as minhas prioridades e vi que eu devo voltar a focar em programação. Como gosto mais de 3D e tenho conhecimentos intermediários na plataforma Java, é natural eu ir para esta linguagem, mesmo ela não sendo recomendada para aplicações desktop 3D. Aí eu comecei a analisar as engines que existem por aí, o que me faz levantar algumas questões básicas.
A primeira delas é a própria linguagem. Quando uma equipe opta por uma linguagem, ela opta pela linguagem que a maioria sabe. Ou mesmo a equipe opta pelas ferramentas que a empresa licenciou, o que pode forçar a equipe a ter um treinamento ou mesmo procurar no mercado de trabalho pessoal qualificado naquela linguagem. Aqui no Brasil, pelo que ando vendo, a procura em gamedev é maior em Flash, JavaME (celulares) e Blitz 3D. Apesar de C++ ser a linguagem que muita gente recomenda e bla bla bla, dificilmente eu vi oportunidades nesta linguagem (aliás, eu mal vejo oportunidades sérias de emprego na área de programação de jogos. Mas isso é assunto para outro artigo). É claro que há exceções, como empresas como a Ubisoft, que precisam de gente gabaritada nesta linguagem, por ela ser usada em larga escala no exterior e pelas melhores ferramentas de programação serem baseadas nesta linguagem.
O maior problema da escolha da linguagem são suas prováveis limitações, e isso deve ser levantado pela equipe antes de iniciar o desenvolvimento do projeto. O próprio projeto deve ser levado em conta, já que dependendo de fatores como o público-alvo e direção de arte, pode ser mais interessante ir para uma certa abordagem específica. Pretende fazer um jogo 3D? Procure uma engine gráfica. Um game de puzzle ou plataforma: Flash pode ser uma ótima saída além de ser bem rentável, caso você coloque num site e ganhe dinheiro com publicidade. Se for só pra estudo, APIs como Allegro podem resolver o problema.
Então a linguagem foi escolhida, mas falta as ferramentas adicionais. No caso, as engines gráficas e/ou APIs disponíveis por aí. Então entra novamente o estilo gráfico. O Flash, por exemplo, tem uma linguagem embutida e é relativamente fácil fazer a parte gráfica. O problema maior é o custo, já que a equipe teria de licenciar a ferramenta. Mas o Flash sozinho não é interessante caso o projeto seja em 3D (a menos que você faça igual a Aquiris e criar games usando a engine Unity e usar o Flash), o que é necessário usar uma engine robusta. C++ nesse caso é a melhor pedida, já que as melhores engines disponíveis são para esta linguagem. Se for 2D, também é C++, com Allegro e SDL. Se for celular, Java, por ser a plataforma mais comum de se ter na maioria dos aparelhos instalados, além do próprio Java ter uma API própria pra desenvolvimento mobile: Java Micro Edition.
Com esse tanto de possibilidades, muito desenvolvedor iniciante fica perdido. Escolher uma linguagem para trabalhar é difícil, já que para o futuro programador ficar bom nela demanda bastante tempo. Chuto pelo menos de 6 meses a 1 ano pra ele conseguir fazer coisas básicas e intemediárias e pelo menos 3 anos para ele ser um expert, isso se ele estudar com afinco durante todo esse tempo. Ainda assim ele tem de ficar atento com todas as novidades da linguagem e da área, para ele não ficar para trás e desatualizado.
Mesmo ele escolhendo a engine, ele fica limitado a ela durante todo o projeto e com isso escolher uma, como disse acima, é bem complicado. Primeiro que é necessário ter o projeto do jogo em mãos e nele tem de ter tudo relacionado ao estilo gráfico. O jogo vai ter partes chuvosas? Vai ter fumaça? A equipe tem de analisar se aquela engine tem como facilitar a geração gráfica desses recursos, para facilitar a vida dos programadores e não obrigar os caras a programar coisas difíceis que podem demandar bastante tempo e atrasar o projeto. Além disso, se a escolha for equivocada, a equipe terá de continuar até o fim ou recomeçar, o que pode inviabilizar o projeto. Se ela estiver no começo do desenvolvimento ou mesmo criando um protótipo, ela pode se dar ao luxo de alterar a ferramenta e re-testar (mas envolve custos). Se o desenvolvimento está em processo intermediário, aí os programadores terão de se virar pra fazer coisas que em outra engine teria o recurso de forma automatizada.
Outro fator importante na escolha da engine é na documentação e no suporte. OK, para nós desenvolvedores indie a palavra suporte pode parecer uma piada, mas se uma equipe tem condições de adquirir uma engine paga, é interessante analisar se os mantenedores tem como ajudar a equipe com dúvidas diversas. No caso da documentação, se a engine tem algum manual e/ou tutoriais, isso facilita pra equipe poder estudar a engine e a sua estrutura. Se a engine tem fóruns de discussão, os programadores podem pedir ajuda e pessoas mais experientes podem ajudar a equipe em executar funções mais complexas do jogo!
O que quero com este texto é fazer os jogadores pensarem nos ítens acima e analisarem as melhores alternativas. Pode ser bem demorado analisar diversas engines até encontrar a melhor solução, mas no final das contas a equipe pode ter um jogo decente em mãos e terá conhecimentos sólidos naquela engine, o que pode ser bom em futuros projetos, poupando tempo e recursos.

Atualmente como desenvolvedor de software backend, mas já foi jornalista e editor de conteúdos por mais de 10 anos, trabalhando também em portais importantes como o START UOL, Card na Manga e A Pá Ladina, além de outros sites de esports e MMOs. Hoje cobre com especialidade jogos como Fortnite, World of Warcraft, souls-likes, animes, games, cultura pop e é fã de cosplays!