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.
fonte
Respostas:
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.
fonte
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.
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.
fonte
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.
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.
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.
Não, o Java não estará disponível nos consoles.
fonte
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.
fonte
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 :)
fonte
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.
fonte
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.
fonte
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
malloc
quanto você podenew
. 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 .fonte