GUJ Discussões   :   últimos tópicos   |   categorias   |   GUJ Respostas

C++ vs Java para games


#1

Bem uma grande duvida que tenho e acredito que não sou o único com essa dúvida. Pretendo seguir carreira como programador de games e uma grande duvido que nunca consegui tirar é que qual seria a melhor linguagem para tal situação java ou c++?

  • Qual vantagem de um sobre o outro?
  • Se por acaso haver um jogo feito em c++ consigo reproduzir ele igualmente com a linguagem java ?

#2

Apesar de conhecer muito pouco de C++, posso garantir que, para games, ela possui muito mais bagagem do que Java. API’s como DirectX e OpenGL, são poderosíssimas em C++.
Até existe, se não me engano, uma implementação da OpenGL em Java, mas se quer programar games, vá em C++ sem dúvidas.

Outra coisa, rapaz: existe a engine Unity3D, que suporta scripts escritos em C# e Javascript. Se quiser começar a ver como as coisas funcionam no desenvolvimento de games, recomendo demais que você baixe-a e fique fuçando um pouco.


#3

Sim. Vc poderá reproduzí-lo. A única questão fica por conta da performance, mas isso varia muito e não é totalmente certo que C++ será superior a Java, pelo menos não em toda e qualquer situação.

Com qual vc tem mais afinidade? Se vc já conhece Java e não tem interesse em gastar tempo aprendendo outra linguagem, dá uma olhada no LibGDX, que é um framework para criação de games para várias plataformas; e na jMonkey que é uma engine completa.

Se aprender outra linguagem não for um problema, a dica do @matheus.cirillo é excelente, pois a Unity é bastante popular e tem muito material pra te ajudar a aprender. Lá vc usa o C# que tem sintaxe muito parecida do Java e não terá dificuldade em dominar as particularidades dela.

A respeito de C++ eu penso que se vc está apenas iniciando agora, talvez seja um pouco frustrante, por conta da complexidade da linguagem e que se vc escolher ferramentas como Unity, GameMaker, LibGDX e afins, poderá criar seus prototipos funcionais do seu jogo em menos tempo e com isso ficará mais motivado a continuar aprendendo. Ai, quando já tinhar manjando melhor sobre o que é desenvolver jogos e como eles funcionam será mais tranquilos ir pra C++ e experimentar ferramentas como o Cocos2d-x, que é um framework para jogos ou mesmo uma engine completa como a Unreal 4.

Diz aí qual linguagem vc já conhece e que tipos de jogos pretende desenvolver.

Bons estudos!


#4

Olá wldimiciano, Eu já acredito que posso dizer que sei bem o básico de java e de c#, porém nunca estudei o c++ e sempre ouvi dizer que para games C++ dava uma expansão maior que o java. Bem pretendo criar jogos online do estilo RPG e Action para desktop e quem sabe muito em breve games para mobile. E sei que para mobile me falaram que é java puro programar games mobile. Mas minha dúvida é qual entre essas linguagens ( c++, c# , java) vale mais a pena investir para programar em games?


#5

Minha visão e opinião é de alguém que também tem interesse, mas sem experiencia pratica no assunto.

Acho que o que acontece com C/C++ e a industria de games é que ela é a linguagem usada para construir ferramentas usadas para criar jogos. Por exemplo, A Unity que indicamos é programada em C++; o LibGDX e o jMonkey foram construidas usando bibliotecas escritas em C. As engines usadas para criar grandes titulos como Unreal, CryEngine, Source, etc… são em C++.

Então temos a seguinte questão: Vc quer programar jogos ou as ferramentas para fazer jogos? Tem interesse em saber como as grandes engines funcionam por baixo dos panos ou seu vc quer mais é atingir o usuario final com jogos divertidos e cativantes?

Se quer mesmo desenvolver jogos, incluindo para mobile, e já conhece o básico de C#, vale a pena baixar e experimentar a Unity. Porque vc não baixa, brinca por uma semana, tenta fazer algo simples como um clone de pong ou flappy bird e depois tenta outra ferramenta, ve com qual se dá melhor.


#6

Bom dia!

Tenho exemplos de jogos desenvolvidos na linguagem Java utilizando os recursos da Biblioteca LibGDX, caso tenha interesse em dar uma olhada, são dois projetos de jogos, o Space Invaders e Flappy Birds, neles são aplicados vários conceitos, e o código está todo comentado para facilitar o entendimento.

Segue GitHub: https://github.com/jonathanmdr


#7

Bem eu sou mais apaixonado por games mesmo, meu foco é mesmo em programar games mesmo. Já tenho a engine Unity baixada, mais com ela só e possível programar em c# né então tende a se pensar que c# é bom para se criar games também .É isso? E a Unreal ela aceita quais linguagens?


#8

Você está focando demais na linguagem. Como os colegas falaram, faça jogos simples pra entender como as coisas funcionam e depois vá testando bibliotecas e engines, pra ver qual te agrada mais (nem sempre vai ser a mais completa).

Se você não tem experiência, não recomendaria nem começar pela Unity. Comece com uma ferramenta simples de 2D (Construct 2, libGDX, Love2D, SFML, Phaser, Cocos2D) e faça jogos pequenos, para pegar os conceitos básicos (que podem ser aproveitados nas demais engines).

A Unreal usa C++ e BluePrints (uma “programação visual”). Mas ela é extremamente complexa e pesada, e pode te desanimar pela curva de aprendizado. Não recomendo tentar começar por ela.

Abraço.


#9

Vou começar por esse modo que você me sugeriu. e na criação de jogos 2D vou usar java mesmo. Obrigado


#10

A Cocos2D só suporta Java para desenvolvimento Android. Há uma versão para Java mas não sei a quantas anda. Para desktop, você pode usar C++ , dentre outras opções.

Abraço.


#11

Eu estou no mercado de Games há vários anos. A dica que eu dou é: a menos que você esteja fazendo um jogo para Android, esqueça o Java para games. Ele é simplesmente uma das piores plataformas para se fazer esse desenvolvimento. Os motivos são vários:

a) Não possui nenhuma plataforma madura para desenvolvimento. A JMonkey está a anos luz da Unity ou da UDK
b) Não dá garantias de realtime. Será difícil livrar o game de glitches causados pelo garbage collector;
c) Não tem sobrecarga de operadores. Classes matemáticas são simplesmente traumáticas de se usar na linguagem, e elas são muito usadas em games.
d) Tem suporte a pouquíssimas plataformas. Nenhum console, nenhum portátil, nenhum dispositivo móvel. Cuidado, Android e JavaSE são duas plataformas diferentes.
e) Não tem suporte a praticamente nenhum dispositivo “gamer”: volantes, joysticks, óculos de VR, etc…
f) A comunidade de jogos em Java é pequena, formada por alguns loucos aficcionados que insistem na linguagem. Mas há pouco apoio da indústria, nenhum apoio da Oracle, e pouco interesse.

Se você quer começar com uma linguagem mais tranquila, não perca tempo. Siga a dica do colega e parta para o C# com a Unity. Há muitos cursos bons (como o da Udemy, ou vários tutoriais na UnitStore), muitos livros e a linguagem é similar ao Java. A Unity também conta com um enorme arsenal de ferramentas e uma comunidade gigante, com diversos plugins e add-ons para baixar.

A Unity também tem suporte a criação de jogos 2D.

Além disso, é a plataforma mais usada na área de jogos no Brasil, o que garante que você terá mais empregabilidade na área no futuro, se você realmente quiser investir na carreira.

O C++ também é uma opção interessante. Mas, a menos que você queira ser um programador de engines algum dia, ninguém usará C++ “na unha”. Se esse é seu caso, comece pela UDK e, em paralelo, vá estudar a fundo computação (padrões de projeto, alocação de memória, algoritmos, etc). Mas para fazer engines, pode esperar no mínimo uns 3 ou 4 anos de estudo, após a faculdade terminar.


#12

Concordo plenamente Java ser uma das piores, totalmente fora de cogitação a plataforma de execução de aplicação Java para games.


#13

Isso também explica porque praticamente não existem games grandes feitos em Java. Existe uma ou outra exceção.

Mesmo o Minecraft, foi portado pra outra plataforma quando precisou sair do PC. O que mostra que realmente escolher Java foi um enorme vacilo.

E detalhe que aqui estamos flexibilizando. Pois a plataforma J2SE sequer dá suporte ao OpenGL. Estamos considerando “Java+LWJGL”, que é uma lib nativa que roda fora da plataforma e que, não necessariamente estará em todos os dispositivos onde o Java roda.


#14

Falou tudo, e me tirou uma grande duvida, programa um jogo em C++ na “tora” vai custar muito tempo e dedicação e não vai ser produtivo, a não ser que se tenha uma grande equipe, porém como já estava estudando C++ vou continuar e terminar de ver o material que tenho, até porque a maioria das linguagens vem de C e assim por diante.
Agradeço o esclarecimento.


#15

Seu jogo vai rodar aonde?
Não tem muito sentido discutir qual melhor linguagem para games pq a plataforma que pretende suportar é que decide qual linguagem vai ter que usar.

A JVM não é uma plataforma para games (jars são facilmente pirateados/descompilados) por isso não vejo muito sentido em usar Java pra isso.


#16

Sim, é fato, C++ é a linguagem alto nível mais rápida que existe se você tiver como investir todo o tempo que ela necessita. E realmente, se existe alguma parte da sua aplicação que não precisa de todas as garantias que uma linguagem como Java te dá, vá em frente, use o C++. E você nem precisa escolher exclusivamente uma ou outra. Por ex, a libgdx faz uso de algum C++ https://github.com/libgdx/libgdx/blob/master/gdx/jni/android/AndroidGL20.cpp por exemplo (tá certo que aqui é mais uma questão de integração).

Mas invocando aqui o famoso e importante princípio de Pareto, usar C++ nos pontos críticos e em todos os outro uma outra linguagem menos perigosa é o ideal. Um outro ponto é que C++ tem problemas com tempo de compilação que até hoje os membros de seu comitê tentam resolver, confira esta apresentação https://www.youtube.com/watch?v=IA14LXnBcJg (em inglês) para saber como eles estão pensando em resolver este problema através do sistema de módulos.

Respondendo a sua segunda pergunta: Dependendo do jogo sim. Para um AAA certamente não. Mas você pode chegar bem perto. Geralmente o problema vai se dar no gerênciamento de memória, frameworks java como Libgdx lidam com isso muito bem tirando da responsabilidade do Garbage Collector o gerencimento de coisas comumente grandes como texturas.

Eu escrevi um artigo sobre o assunto caso você queira saber mais da minha opinião https://bladecast.pro/programacao/java-vs-c++-para-desenvolvimento-jogos