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 ?
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.
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.
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?
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.
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.
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?
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.
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.
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.
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.
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.
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.