O Java é viável para desenvolvimento sério de jogos? [fechadas]

64

Eu vasculhei a Internet, mas não há muitos recursos para o desenvolvimento de jogos Java, nem tanto quanto o C ++. De fato, a maioria dos mecanismos é escrita em C ++. Tentei jogar um jogo feito com o jMonkeyEngine, mas o jogo foi terrivelmente lento, a ponto de meu computador congelar. Eu não tinha outros aplicativos Java em execução, e nada com muitos recursos. Por outro lado, meu computador pode jogar a maioria dos jogos 3D modernos com facilidade. Se eu continuar aprendendo e aprimorando Java agora, e acontece que mais tarde sou obrigado a aprender C ++, fazer a troca pode ser difícil.

Java é uma linguagem aceitável para desenvolvimento sério de jogos? Sério, quero dizer gráficos de alta qualidade, sem muito atraso nos computadores modernos. Eu também quero considerar fazer jogos para consoles.

tehtros
fonte
25
Minecraft não é construído com java? Ou principalmente OpenGL? Ah, e confira C # se você não estiver 100% definido em java, pois é incrível.
Aralox
7
Por que você não vem ao bate-papo Stack Overflow C ++? Adoramos C ++, achamos que pode ser absolutamente usado corretamente, e sabemos como fazer isso, e ficaríamos felizes em compartilhar.
23412 DeadMG
12
O Minecraft é as habilidades de codificação do java + LWJGL + Notch, por isso é TERRÍVEL.
MLProgrammer-CiM
3
Sejam seus jogos de codificação ou qualquer outra coisa, trancar-se em um único idioma não ajudará no futuro. Ramifique um pouco, C ++ ou qualquer outra coisa como Python. Leva tempo, mas faz de você um desenvolvedor melhor.
Loganfsmyth 14/03/12
4
Você receberá muitas informações erradas porque as guerras Java / C ++ queimam intensamente, esteja preparado para pedir exemplos específicos antes de aceitar uma opinião e também pesquisar mais por conta própria =) Dito isto, concordo com @loganfsmyth que você precisará conhecer vários idiomas, pois só assim poderá escolher a ferramenta certa para qualquer tarefa. No futuro imediato, se você quiser apenas aprender "programação de estilo de jogo", use o que lhe agrada (Java) e depois aprenda C ++ mais tarde. Heck, mais tarde você pode estar fazendo pipelines de conteúdo em C # e jogos em Java ME, difícil prever =)
Patrick Hughes

Respostas:

54

Sim, verifique esta lista para uma prova. Esses são alguns jogos feitos com Java usando a Biblioteca de jogos Java leve (LWJGL). É uma estrutura de baixo nível, que fornece OpenGL para gráficos de alta qualidade e OpenAL para sons. Ele também fornece API de entrada. Com eles, você pode facilmente começar a desenvolver um jogo sério em Java.

Atualmente, estou escrevendo meu segundo jogo 3D como um projeto de hobby em Java, e eu simplesmente adoro isso. No passado, eu costumava escrever meus jogos com C ++, mas depois de mudar para Java não há como voltar atrás. O suporte a vários sistemas operacionais com Java pode ser muito fácil, por exemplo, meu jogo anterior em Java, que desenvolvi no Windows por um ano, trabalhou no Linux imediatamente e no OS X com apenas um bug, sem a necessidade de compilar nada nessas plataformas.

Por outro lado, com Java, você tem alguns problemas.

  1. Coletor de lixo. Como outros já declararam, o gerenciamento não determinístico da memória é um problema, e você precisa codificar isso em mente.
  2. Falta de bibliotecas de terceiros. A maioria das bibliotecas disponíveis não suporta Java. Por outro lado, você sempre tem a opção de chamar essas bibliotecas nativas do Java também, mas é mais trabalhoso fazê-lo. Também existem portas Java ou wrappers prontos disponíveis para bibliotecas populares, por exemplo, estou usando o JBullet - porta Java da Bullet Physics Library . Por outro lado, o Java possui uma enorme biblioteca de classes integrada, o que reduz a necessidade de bibliotecas de terceiros que não são relacionadas a jogos. A falta de bibliotecas não foi um problema para mim, mas posso imaginar que possa ser para outros.
  3. O Java não é suportado por consoles de jogos populares e não há uma mudança fácil para os do Java, tanto quanto eu sei. Por outro lado, o Android, que é uma plataforma móvel popular, usa alguma forma de Java. Essa também é uma opção, mas não exceto o mesmo código Java para funcionar em um PC e um dispositivo Android.
  4. Comunidade menor. A maioria dos programadores de jogos usa C ++ e, na minha experiência, muitas vezes não gosta de Java. Não espere obter tanta ajuda de outras pessoas. Não espere conseguir um emprego no desenvolvimento de jogos sem habilidades em C ++.
msell
fonte
40

Na verdade não. Aqui está a questão: primeiro, há muito pouco em termos de bibliotecas existentes para Java em comparação com praticamente tudo o que é para C ++.

Em segundo lugar, o Java como linguagem simplesmente não se presta bem ao desenvolvimento de jogos - quero dizer, por exemplo, se você está lidando com buffers de GPU, o Java não fornece um recurso de linguagem que o ajudará a garantir que eles estejam corretamente bloqueados e desbloqueado ou descartado, o que o C ++ faz. Além disso, há o problema de desempenho - e o GC não é determinístico, o que é muito ruim para um jogo.

Eu nunca vi nenhum jogo não independente que passasse um tempo significativo em um idioma que não foi compilado no código nativo antes da execução, e mesmo os jogos independentes que o fazem são uma raridade. Então, minha crença agora é que isso simplesmente não pode ser feito.

Além disso, se eu continuar aprendendo e aprimorando Java agora, e depois for necessário que eu aprenda C ++, será difícil mudar?

Sim, com certeza. Java e C ++ são muito diferentes, apesar de suas semelhanças sintáticas superficiais. A experiência em Java não conta praticamente para aprender C ++.

A jogabilidade através de gráficos é uma escolha viável, e você pode vê-la no sucesso de jogos como Terarria e Minecraft. Mas se você pretende criar gráficos srs, isso não será possível em Java.

DeadMG
fonte
6
+1 desde que ele especificou gráficos pesados, jogabilidade rápida sem atrasos.
21412 Joshua Drake
11
A falta de tipos de dados não assinados do Java também se opõe a isso. Sim, você pode contornar isso, mas não é o ideal e estará usando um código que não reflete os dados subjacentes corretamente.
Maximus Minimus
@deadmg Caso esteja bloqueado e desbloqueado , você está se referindo a algumas funcionalidades da API do DirectX? & Você pode me dizer, o que há de tão ruim em ter um GC não determinístico.
Quazi Irfan
O GC não determinístico pode se equiparar à queda de quadros, se você parar de fazer uma pausa ruim no mundo e bloquear as coisas por mais tempo do que o necessário para renderizar o quadro. Na prática, isso realmente não acontece com frequência / sempre, se você planeja usar a memória, os coletores da JVM podem ser configurados para uma pausa baixa (dentro dos limites seguros para queda de quadros). Ainda assim, não é uma coisa divertida de se lidar. Você acaba tendo que devolver quantidades significativas da produtividade que ganhou quando saiu do C ++.
Michael
2
Para começar, você terá que reescrever totalmente.
DeadMG
25

Então, eu estou realmente falando sério sobre desenvolvimento de jogos, o Java ainda é uma opção viável? Eu tentei várias vezes aprender C ++, mas eu realmente não gosto da linguagem. Eu realmente não sei por que, mas geralmente, sempre que tento aprender, nunca consigo entender os tópicos.

Se o seu motivo para escolher Java for o fato de você não entender o C ++, seus programas Java não serão rápidos o suficiente para gráficos de alta qualidade. O uso de um idioma de nível superior deve ser porque o torna mais produtivo, não porque você não conseguiu entender o idioma de nível inferior.

Eu não acho que seja uma péssima idéia escrever um jogo em Java, especialmente se o jogo for simples, mas você imediatamente terá problemas de desempenho em Java se estiver usando-o como muleta.

Portanto, em resumo, o Java pode ser levado a sério, para desenvolvimento sério de jogos. Isso inclui gráficos pesados, jogabilidade rápida sem atrasos e, possivelmente, e mudança fácil para consoles?

  1. Gráficos pesados: Possível, mas você fará o mesmo em Java / LWJGL que em C ++ / GL: escrevendo bytes em buffers de GPU e / ou usando as listas de exibição obsoletas, como o Minecraft. Se você não entender o gerenciamento de memória, também não fará isso corretamente.

  2. Jogo rápido, sem atraso: não é uma tarefa fácil em nenhum idioma, e é mais provável que você dê um tiro no pé de qualquer maneira, sem pensar nisso.

  3. Não, o Java não estará disponível nos consoles.

Jimmy
fonte
Como uma questão paralela, o que substituiu as listas de exibição quando foram preteridas?
Suds
@Uds: pipeline programável, acredito.
23412 DeadMG #
ha! já cobriu. VBOs: gamedev.stackexchange.com/questions/22170/…
Jimmy
Plataformas móveis podem ser consideradas consoles. Sei que ele provavelmente estava falando dos três grandes, mas o Android usa Java e muitos jogos são criados para ele.
Amplify91
11
@ Amplify91 sim, alguns jogos são escritos em java para android. Mas a maioria dos bons jogos e provavelmente todos os jogos gráficos intensivos ou multiplataformas são escritos em C ++ usando o Android NDK.
Coyote
15

Um programador experiente geralmente conhece muitas linguagens de programação - aprender linguagens de programação extras não é tão difícil assim que você conhece uma. No entanto, eu recomendaria fortemente que o C ++ não fosse sua primeira língua e provavelmente também não a segunda.

Isso ocorre porque o C ++ obtém grande parte de sua eficiência por não realizar nenhuma verificação significativa de erro em tempo de execução. Por exemplo, acessar um elemento no final de uma matriz em Java sempre gera uma exceção dizendo ao programador exatamente o que há de errado. No C ++, você pode ter sorte e ele trava imediatamente, mas com muita freqüência ele lixeira silenciosamente alguns outros dados e o erro não será exibido até muito mais tarde .

Eu sugiro que você fique com Java por enquanto (ou mude para C # se preferir). Isso permitirá que você faça as coisas mais rapidamente do que usar C ++, e o desempenho em um PC não deve ser um problema.

Pense em aprender C ++ depois de concluir alguns projetos em idiomas mais seguros. C ++ é o que você precisa para a maioria dos trabalhos profissionais de desenvolvimento de jogos.

Observe que, com exceção do C # / XNA, para obter um jogo que você escreveu em um console, no mínimo, é necessário configurar uma empresa, um escritório e ter um grande orçamento disponível para hardware de desenvolvimento e outras despesas.

Adão
fonte
Isso também é excepcionalmente verdadeiro, porque outras linguagens além do C ++ proporcionam uma sensação de realização. C ++ pode levar centenas de horas para o que pode parecer nada. Aprender outros idiomas primeiro permite molhar os pés.
Darkenor
Seus comentários sobre tratamento por falta de erro são realmente sobre C (e o chamado código C ++ que realmente é C). O C ++ possui bibliotecas padrão (e bibliotecas de modelos padrão) que possuem um tratamento de erros muito melhor do que o que você descreve. O C ++ também possui bibliotecas fornecidas pelo fornecedor (como o MFC) que fornecem tratamento decente de erros.
Jasper
9

Isenção de responsabilidade: isso não responde exatamente à sua pergunta. No entanto, tentei (brevemente) mencionar alguns pontos que podem ser do seu interesse.

A razão pela qual você vê muito sobre o C ++ é porque o C ++ ainda é o padrão do setor - a linguagem mais comum para consoles etc.

Java não é usado com frequência. O Minecraft é um jogo bastante popular que cresceu muito com o Java; mas não é tão bom graficamente. O Spiral Knights não é ruim - também feito em Java, com gráficos significativos.

Se você gosta de Java, o C # é muito semelhante em sintaxe, com a vantagem de poder interoperar com C ++ - portanto, coisas de baixo nível podem ser feitas em C ++, se necessário. O Unity pode usar C # para scripts e o XNA é uma excelente opção.

Novamente, o Java não é amplamente utilizado. Se você gosta do estilo e da sintaxe, acho que você achará o C # uma experiência de codificação muito semelhante e muito agradável.

Espero que seus sonhos consigam, é muito divertido ao longo do caminho :)

ashes999
fonte
8
Muitas e muitas imprecisões nessas postagens. Os gráficos "ruins" do Minecraft não estão (fortemente) relacionados ao idioma. O mau desempenho do MC está diretamente relacionado ao Java ser uma linguagem ruim para jogos porque HUGE apresenta problemas de desempenho e LWJGL é uma biblioteca inadequada para grandes projetos de codificação pelo mesmo motivo. Mas o principal fator foi a má codificação e implementação do Notch, que está sendo corrigida ... lentamente. O C # fornece todos os ups de memória gerenciada sem a maioria dos problemas de desempenho do Java. A desvantagem é que o C # é fortemente centrado na Microsoft para jogos e aplicativos.
MLProgrammer-CiM
2
@EfEs: Eu odeio dizer isso a você, mas a memória gerenciada é terrível para os jogos, e as pessoas que codificam jogos no XNA precisam gastar mais tempo gerenciando a memória do que as pessoas que codificam em C ++. A natureza não determinística do GC significa que você precisa reunir praticamente tudo e evitar alocação como a praga - não da maneira como o idioma deveria ser usado.
23412 DeadMG #
Esta resposta não foi 100% precisa; Eu apenas citei exemplos que conheço vagamente. Sinta-se livre para DV.
ashes999
2
@DeadMG Eu sei que C ++ é o caminho a percorrer, eu estava apenas tentando explicar que C # é melhor que Java para jogos.
Programador-CiM
5
Sendo um desenvolvedor de C # de longa data (não pensado pelo desenvolvedor de jogos), acredito que o pool e o gerenciamento de memória são grandes problemas para qualquer sistema mal projetado. As pessoas com a mentalidade de C / C ++ e as formas de desenvolvimento que conheço dificilmente ofegam os padrões de memória gerenciada, design e arquitetura que devem ser usados ​​e tiram vantagem deles em uma linguagem como Java / C #. O que estou tentando dizer não é que as técnicas ou produtos C / C ++ sejam ruins, mas que mesmo se você usar linguagens mais simples em termos de sintaxe (como Java e C #), ainda precisará de muita experiência para projetar seu jogo da maneira certa. maneira.
Ivaylo Slavov
3

Isso não responde à sua pergunta; os problemas gráficos e de console parecem ser algo que você precisa considerar muito. O GC também afeta o desempenho. Mas o que eu escrevo sobre:

Se você estiver escrevendo programas OO grandes e complexos, você os escreverá 5 vezes mais rápido em Java que em C ++. Além disso, a manutenção será muito mais fácil. Troquei (reconhecidamente por software que não é de jogo) e minha produtividade disparou. C #, outra boa alternativa, é mais difícil de aprender que Java, porque há muito mais. Quando você conhece, pode escrever código ainda mais rápido do que em Java; oferece muitos truques. No entanto, acho que esses truques podem dificultar a manutenção. E também há o documento Java, que ajuda nas bibliotecas da Sun e no seu próprio código antigo. C # não tem nada parecido.

Eu fiz um grande jogo peludo em Java e achei a linguagem perfeita, mas meus gráficos eram elementares e não era um jogo de tiro em que um décimo de segundo era uma eternidade para os jogadores. Além disso, espero acrescentar muito mais tarde, enquanto acho que a maioria das pessoas simplesmente escreve um jogo totalmente novo.

RalphChapin
fonte
3

Olha cara, a resposta simples para "O Java é viável para desenvolvedores de jogos" é um óbvio sim. Você pode usar qualquer linguagem de programação para criar jogos. Isso não significa que você deveria .

Provavelmente, as mesmas coisas que impedem você de C ++ (gerenciamento de memória de baixo nível, sem coletor de lixo, ter que prestar atenção a ponteiros, estruturas como matrizes, etc.) são as mesmas coisas que você deve aprender se quiser explorar os recursos de um computador com mais eficiência . Seus jogos serão melhores se você estiver explorando os recursos do computador com mais eficiência.

O Java faz algumas coisas (como a verificação dos limites da matriz) que apenas o tornam mais lento. No presente exemplo ruído código Java Perlin otimizado, o autor comentou "(acesso de matriz é muito mais lento do que o acesso de membros)". Esse tipo de coisa é bastante intuitiva, vinda de um background em C ++. Mas em Java, essas coisas são.

Eu digo: pare de desviar da bala, aprenda C ++ e use-a.

bobobobo
fonte
1

Você deve fazê-lo no idioma que você conhece melhor até poder ter uma educação formal (Bacharelado em Ciências?) Em Ciência da Computação, enfatizando o design de jogos. Você poderia usar seu jogo para obter uma bolsa de estudos, especialmente se você puder dizer "Eu fiz isso sem nenhum treinamento formal em Java"

As JVMs modernas, mesmo a Oracle, têm muitos recursos para abordar as preocupações que as pessoas levantaram aqui. Você pode usar diferentes coletores de lixo para obter um comportamento mais determinístico. Não tenho vasta experiência com as bibliotecas 3D - apenas um pouco com Java3D - mas ninguém aqui parece ter se queixado delas. A análise de escape agora permite a elisão de trava e a alocação muito mais rápida / desprezível de objetos de vida muito curta.

O problema é que, se você escolher Java do C ++, precisará aprender a usar a simultaneidade corretamente e ter um bom entendimento do gerenciamento de memória. Afinal, você pode estragar tão facilmente mallocquanto você pode new. Não sei como são as ferramentas para C ++, mas as ferramentas de criação de perfil para Java são bastante fáceis de usar, gratuitas e integradas ao IDE. Você pode usá-los para rastrear problemas de desempenho e aprender .

Ornitorrinco Mutante
fonte
5
A educação formal em CS vale uma merda para habilidades de programação reais em qualquer disciplina. Eu saberia, estou no meu terceiro ano.
DeadMG 15/03/12
4
Definitivamente discordo do DeadMG. Tendo formado e escolhido os cursos que eu mais gosto, o CS aumentou meus poderes de desenvolvimento de jogos de 10% para 100%. Não me ensinou interface do usuário, iconografia etc., mas codificação real e real.
ashes999
2
@ ashes999: Então você teve sorte. Meu curso é inútil e sei que existem muitos outros que sentem o mesmo.
23412 DeadMG
2
@DeadMG é difícil ver quando você está estudando. Depois de trabalhar alguns anos em F / T e aprender outras habilidades complementares, você verá. Eu fiz. Mas talvez eu tenha prestado muita atenção e tentado aplicar tudo ao meu hobby de desenvolvimento de jogos.
ashes999
11
Eu diria que depende da escola e do professor. Tive algumas ótimas aulas de programação onde aprendi muito; e eu tinha alguns onde realmente senti que perdi o conhecimento participando. É tudo sobre ter um bom professor ou não. IMO.
Nate