QUAL ENGINE ESCOLHER PARA CRIAR JOGOS? - Como Criar Games
Você está aqui: Início | Dicas | QUAL ENGINE ESCOLHER PARA CRIAR JOGOS?
Esta questão é uma das dúvidas mais frequentes quando iniciamos no desenvolvimento de jogos. São inúmeras as variáveis que podem influenciar essa decisão. E um dos problemas é que, quando entramos em uma nova área, o que nós menos sabemos é distinguir o que é mais relevante daquilo que é menos relevante. Nesse artigo eu apresento informações, opiniões e experiências sobre esse tema.
Existem basicamente três caminhos para programar um jogo:
1- Utilizar uma Linguagem de programação.
2- Utilizar um Framework.
3- Utilizar uma Game engine.
Escolher uma linguagem de programação para programar um jogo é praticamente criar todos os códigos do zero. Se a linguagem for de baixo nível, o programador terá que usar números binários e hexadecimais para dar instruções para o computador. E isso significa muitas linhas de código para pouco resultado. Se a linguagem for de alto nível, as coisas já ficam um pouco mais rápidas. Porque ao invés de usar sequências de números é possível usar palavras como "print("hello world");" ou "alert("hello world");".
Optar por um Framework faz com que o trabalho fique ainda mais rápido. Um Framework é um conjunto de biblioteca de códigos que algum programador teve o trabalho de desenvolver, e que agora outros programadores podem utilizar. Por exemplo, com um comando como este: game.add.sprite(200, 200, "imagem"); é posssível posicionar uma imagem na tela na posição x=200px e y=200px.
E com uma Game Engine o trabalho fica mais ágil ainda. Com um Framework o programador precisa decidir, por exemplo, qual a melhor forma para gerenciar as animações das imagens no jogo. Enquanto que, a Engine oferece várias rotinas e sub-rotinas prontas, que já foram testadas e utilizadas para produzir diversos tipos de jogos: iluminação, física, colisões, animações, etc. E se a Engine for visual, arrastar uma imagem na tela pode ser suficiente para adicionar uma imagem no jogo.
Ficaram claras as diferenças?
Uma Engine, ao mesmo tempo que ela facilita ainda mais o trabalho, ela também dita as normas de como algo deve ser feito. Muitas vezes o programador não tem acesso aos módulos que gerenciam iluminação, física, colisões, animações, etc. Enquanto que, com uma Linguagem de programação ou Framework, o programador tem a liberdade de alterar algo que, pode ser o mais eficiente para a maioria dos jogos, mas que, pode não ser a melhor solução para um jogo específico que ele precisa desenvolver.
Para um iniciante em desenvolvimento de jogos é muito raro ele se deparar com algo assim. Contudo, um exemplo disso foi o caso do programador Tommy Refenes do jogo Super Meat Boy. Ele optou por criar a sua própria Engine com C++, porque na época as Engines disponíveis não proporcionavam o resultado que ele pretendia.
Ok. Mas isso não é tudo!
Uma Engine facilita a organização do projeto e também possibilita que os programadores cometam menos erros. Um dos problemas de utilizar um Framework é que o código se torna um verdadeiro spaghetti se o programador não é bem organizado. E depurar o código em busca de erros pode ser bem trabalhoso. Por isso é preciso considerar que as decisões de um programador profissional não devem ser as mesmas que a de um programador iniciante.
Ou seja: Melhor e Pior é relativo. Pois, depende dos resultados que cada pode buscar.
Sobre as diferenças entre Programador e Game developer
Muitos programadores alegam que utilizar uma Engine para desenvolver um jogo a pessoa não aprende. Pois, ela não sabe o que está acontecendo por trás do código. Contudo, nem tudo precisamos saber mesmo. Há muitas pessoas que utilizam um computador que sabem muito pouco sobre como ele funciona. E saber isso pode não ter relevância alguma para o uso que elas fazem do computador.
Além disso, é preciso considerar que saber programar é diferente de saber criar jogos. A programação é apenas um dos elementos de um jogo. A pessoa pode ser um expert em programação, que, mesmo com toda esta expertise, isso não garante que ela desenvolva um bom jogo. Por exemplo, uma coisa é saber desenvolver uma mecânica complexa que depende de cálculos matemáticos de física. E outra coisa é saber quando, quanto, de que forma, por que, e como utilizar isso no jogo. Percebe a diferença?
Um jogo requer o desenvolvimento de uma série de habilidades. Principalmente quando pretendemos desenvolver um jogo sozinho. Por exemplo, um jogo pode requerir: imagens e animações adequadas, músicas e efeitos sonoros adequados, game design, level design, jogabilidade, narrativa, interface, marketing, etc. Os game developers buscam a harmonia de todos estes elementos. Enquanto que, um programar é muito mais focado na programação – e nem sempre na experiência do usuário.
E sobre o que escolher para desenvolver jogos?
Para jogos simples
Atualmente é possível criar jogos simples mesmo sem saber programação. As Engines Construct e Stencyl são exemplos. Elas requerem apenas lógica de programação.
Construct permite criar jogos em HTML5 de forma bem rápida. Uma das desvantagens desta Engine é que a versão gratuita possui limitações quanto ao número de eventos que é possível utilizar. Outra desvantagem é que um jogo HTML5 executado no Browser de um smartphone possui performance muito inferior a um jogo exportado na linguagem nativa de uma plataforma.
Stencyl é uma Engine inspirada em Scratch. Ela utiliza a linguagem Haxe e o Framework OpenFL. Stencyl permite código escrito e também blocos visuais drag'n drop. A versão gratuita permite exportar para Flash e HTML5 sem limitações. E as versões pagas permitem exportar o jogo em código nativo para múltiplas plataformas: Windows, Linux, Mac, Flash, HTML5, Android, Iphone. Uma das desvantagens de Stencyl é a performance. O Framework de física e colisões, o BOX2D, ele não foi muito bem implementado. Ainda assim, para jogos simples e protótipos de jogos é minha preferida.
Game Maker é outra Engine que entra nessa lista de Engines mais adequadas para a criação de jogos simples. Game Maker também permite exportar o jogo para múltiplas plataformas. A primeira versão do programa permite exportar jogos executáveis gratuitamente. Game Maker 2 a versão demo possibilita apenas testar a Engine.
Destas três Engines, Construct é a que possui a menor curva de aprendizagem. Stencyl é a mais produtiva depois que você aprendeu a usar a Engine. E Game Maker é a que apresenta melhor performance entre estas três.
Diversas outras Engines poderiam entrar nessa lista para criação de jogos simples. Cito apenas estas 3 considerando que todas elas:
1- Possuem uma comunidade ativa que responde as dúvidas dos usuários.
2- Possuem boa documentação.
3- Possuem muitos vídeos e tutoriais.
4- Possuem cases de jogos de sucesso.
5- Há uma empresa gerenciando o projeto. Isso dificulta a possibilidade do projeto ficar abandonado no Github e não receber as correções de bugs e atualizações.
Para jogos estilo RPG
Existem diversas versões da Engine RPG Maker. Esta Engine é ideal para quem pretende desenvolver um RPG. Ela oferece praticamente tudo pronto: sistema de diálogos, sistema de batalhas, sistemas de inventário, etc. Coisas estas que, para criar do zero, não é muito simples para um iniciante. Também é possível criar outros tipos de jogos com RPG Maker. Contudo, como o próprio nome destaca, ela é uma Engine mais adequada para RPG. Como RPG Maker foi uma das primeiras Engines comerciais, muitos são os desenvolvedores de jogos que começaram com esta Engine. Foi este o meu caso. Comecei com RPG Maker VX.
Para jogos estilo Visual Novel
Belle é uma Engine opensource multi-plataforma ideal para Visual Novel, que são aqueles jogos que o elemento principal é a narrativa do jogo. De igual forma como o RPG Maker ela oferece praticamente tudo que este estilo de jogo precisa. Por isso, ela pode ser uma das melhores opções para este tipo de projeto.
Para jogos complexos 2D
Godot é uma Engine opensource multi-plataforma. Permite criar jogos 2D e 3D. A versão 2 permite utilizar GDScript que é uma linguagem de script bem legível semelhante a linguagem LUA. Godot é uma Engine orientada a objetos. Cada elemento do jogo é um objeto e o código de cada objeto faz parte do próprio objeto. Elas usa "Nodes" para organizar o projeto. A versão 3 permite utilizar GDNative que possibilita implementar códigos C++ que é o código base da Engine. Uma das vantagens da versão 3 é que ela terá suporte para o Webassembly presente nos browsers modernos. Isso permitirá maior performance para os jogos nos browsers.
Uma das desvantagens da Godot 2.0 é que ela exporta jogos HTML5 com 30mb. Muitos portais de jogos não aceitam mais do que 6Mb para um web game. Pois afinal, um jogo muito pesado perde mais da metade dos usuários que nem esperam o loading. Como vantagem há o editor de partículas e animação com bones e kinematic. Outra consideração é que o editor de tileset desta engine não é melhor que o software Tiled. Nesse caso, em muitos casos pode ser mais eficiente criar o tileset em um programa externo.
Cocos Creator também é uma Engine opensource multi-plataforma. Permite utilizar C++ ou Javascript na programação. Como vantagem também possui editor de partículas e animação com bones e kinematic. Uma das desvantagens de Cocos é que o Framework da Engine sofreu inúmeras implementações e grande parte dos tutoriais são das versões antigas. Por outro lado, esta Engine é a que possui melhor performance para jogos 2D. Provavelmente apenas o Framework Libgdx escrito em Java seja comparável em termos de performance.
veja como criar um jogo aqui
Defold é uma Engine Free multiplataforma que pertence a empresa King desenvolvedora do jogo Candy Crush. Defold utiliza a linguagem Lua como linguagem script. Uma das vantagens desta Engine é o versionamento de código online que favorece o trabalho entre diversos programadores. Uma desvantagem pode ser o fato de Defold não ser orientada a objetos. Muitos programadores podem acabar perdidos até entenderem sobre como as coisas funcionam e se acostumarem com isso.
Para jogos 3D
Unity e Unreal são as duas Engines 3D mais populares. É possível criar jogos 2D com elas. Contudo, elas são Engines mais adequadas para jogos 3D. Unity possui uma das maiores comunidades. Também há maior número de ofertas de emprego nesta área com Unity. A loja de Assets da Unity pode ser considerada uma vantagem para quem precisa de algum sistema pronto para usar. Contudo, Unity não é uma opção para usuários Linux. Sobre as linguagens, Unity utiliza C#, Boo e Unityscript que é similar ao JavaScript. Unreal utiliza C++ e um sistema visual de script: Blueprints. A principal desvantagem de Unreal é a curva de aprendizagem maior. A principal vantagem é a performance.
Phaser utiliza PixiJS, ambos são os mais populares Frameworks Javascript para criar jogos HTML5. É muito fácil aprender Phaser. No site há exemplos de como fazer praticamente tudo que há em um jogo 2D.
LÖVE é um dos melhores Frameworks para quem procura criar jogos utilizando a linguagem LUA.
Libgdx, como citado acima, é um Framework que proporciona excelente performance. Este Framework pode ser um boa opção para quem já é programador Java.
LWJGL é outro Framework Java. Minecraft é um exemplo de jogo indie muito popular que utiliza este Framework. Mas, por que Java? Notch, o criado de Minecraft, ele simplesmente utilizou a linguagem que ele estava mais familiarizado.
Programadores C# podem escolher XNA para desenvolver jogos desktop e MonoGame para desenvolver para múltiplas plataformas. Exemplos de jogos escritos com XNA são FEZ e Terraria.
SDL e SFML são os Framework C++ mais populares. São opções para programadores que buscam desenvolver jogos robustos que utilizam ao máximo os recursos do sistema. Redigit, criador do Terraria, por exemplo, ele se arrepende de ter usado C# ao invés de C++. Ele usou C# porque era a linguagem que ele conhecia desde novo. Com a experiência do jogo, ele optou por aprender C++ para criar a próxima versão do jogo: Terraria Otherworld.
Muitas vezes um jogo web muito simples é melhor utilizar Javascript puro e menos de 100kb de código. Muitas vezes o melhor é não ficar limitado em uma única Linguagem, Engine ou Framework. Ao mesmo tempo, muitas vezes o problema é não focar em uma única Engine, Linguagem ou Framework. Em conclusão, deixo os leitores tirarem suas próprias conclusões.
PrevAnteriorCurso de animação gratuito da Pixar Filmes
PróximoTutorial Criando um Jogo completo, segundo jogo – #1Next
Fazer jogos em codigos
Meu jogo se chama spidroale
SpidRoale
Obrigado pela matéria. Bem mais completo. Eu gostaria de aprender um pouco com esses Frameworks tipo SDL, FSML, OPENGL…. mas enteder o que são e fazem, e, usando IDEs leves. Só acho exemplos com VISUAL STUDIO. É uma IDE relativamente pesada e ocupa muito espaço. Poderia ser uma IDE ou codificadores com menos de 300mb.