Comentários
- Isn ' t minecraft construído com java? Ou principalmente OpenGL? Ah, e verifique o C # se você não estiver 100% definido em java, pois é incrível.
- Por que não ' você vem ao bate-papo Stack Overflow C ++ ? Amamos C ++, achamos que pode ser usado da maneira certa e sabemos como fazer isso, e ' ficaríamos totalmente felizes em compartilhar.
- Minecraft é java + LWJGL + Notch ' s habilidades de codificação, portanto, em termos de desempenho, é TERRÍVEL.
- Quer seus jogos de codificação ou qualquer outra coisa, trancando-se em um único a linguagem não vai te ajudar no futuro. Ramifique um pouco, seja C ++ ou algo como Python. Leva tempo, mas torna você um desenvolvedor melhor.
- Você ' receberá muitas informações incorretas porque as guerras Java / C ++ queimam brilhantemente, preparado para pedir exemplos específicos antes de aceitar uma opinião e também para pesquisar mais por conta própria =) Dito isso, concordo com @loganfsmyth que você precisará saber vários idiomas porque só então poderá escolher a ferramenta certa para qualquer tarefa . No futuro imediato, se você quiser apenas aprender " programação de estilo de jogo ", então use o que você ' sente-se confortável com (Java) e aprenda C ++ mais tarde. Caramba, mais tarde você pode fazer pipelines de conteúdo em C # e jogos em Java ME, difíceis de prever =)
Resposta
Sim, verifique esta lista para obter uma prova. Esses são alguns jogos feitos com Java usando The Lightweight Java Game Library (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 jogos sérios em Java.
Atualmente, estou escrevendo meu segundo jogo 3D como um projeto de hobby em Java e simplesmente adoro isso. No passado, eu costumava escrever meus jogos em C ++, mas depois de mudar para Java não há como voltar atrás. Suportar vários sistemas operacionais com Java pode ser muito fácil, por exemplo, meu jogo Java anterior, que desenvolvi no Windows por um ano, funcionou 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.
- Coletor de lixo. Como outros afirmaram, o gerenciamento de memória não determinística é um problema e você precisa codificar isso em mente.
- Falta de bibliotecas de terceiros. A maioria das bibliotecas disponíveis não oferece suporte a 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 para bibliotecas populares, por exemplo, estou usando JBullet – porta Java da Biblioteca Bullet Physics . Por outro lado, o Java possui uma enorme biblioteca de classes integrada, o que reduz a necessidade de bibliotecas de terceiros que não sejam relacionadas a jogos. A falta de bibliotecas não tem sido um problema para mim, mas posso imaginar que pode ser para outros.
- Java não é suportado por consoles de jogos populares e não há nenhuma mudança fácil para aqueles do Java até agora como eu sei. Por outro lado, o Android, que é uma plataforma móvel popular, usa alguma forma de Java. Esta também é uma opção, mas não exceto o mesmo código Java para funcionar em um PC e em um dispositivo Android.
- Comunidade menor. A maioria dos programadores de jogos usa C ++ e, em 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 ++.
Resposta
Na verdade, não. Aqui Em primeiro lugar, há muito pouco em termos de bibliotecas existentes para Java em comparação com praticamente tudo que é para C ++.
Em segundo lugar, Java como uma linguagem simplesmente não se presta bem ao desenvolvimento de jogos – quero dizer, por exemplo, se você está lidando com buffers de GPU, então o Java não fornece um recurso de linguagem que o ajudará a garantir que eles sejam bloqueados e desbloqueados ou descartados corretamente, que C ++ faz. Além disso, há o problema de desempenho – e o GC é não determinístico, o que é péssimo para um jogo.
Nunca observei nenhum jogo não indie que passasse um tempo significativo em um linguagem que não foi compilada para código nativo antes da execução, e até mesmo os jogos indie que o fazem são uma raridade.Então, minha convicção agora é que isso simplesmente não pode ser feito.
Além disso, se eu continuar a aprender e melhorar Java agora, e descobrir que mais tarde Preciso aprender C ++. Será difícil fazer a mudança?
Sim, com certeza. Java e C ++ são imensamente diferentes, apesar de suas semelhanças sintáticas superficiais. A experiência em Java não conta virtualmente nada quando se aprende C ++.
A jogabilidade sobre os gráficos é uma escolha viável, e você pode ver isso no sucesso de jogos como Terarria e Minecraft. Mas se você pretende criar gráficos srs, não será possível em Java.
Comentários
- +1, pois ele especificou pesado gráficos, jogabilidade rápida sem lag.
- Java ' s falta de tipos de dados não assinados também é contra isso. Sim, você pode contornar isso, mas ' não é ideal e você ' usará um código que não ' realmente reflete o dados subjacentes corretamente.
- @deadmg No caso de bloqueado e desbloqueado , você está se referindo a alguma funcionalidade da API do DirectX? & Você pode diga-me, o que ' é tão ruim em ter GC não determinístico.
- GC não determinístico pode ser igual a queda de quadros, se você obtiver uma parada errada do O mundo faz uma pausa e bloqueia as coisas por mais tempo do que o necessário para renderizar o quadro. Na prática, isso não ' realmente acontece com frequência / nunca se você planejar sua memória use, os coletores JVM ' s podem ser configurados para pausa baixa (bem dentro dos limites seguros para queda de quadros). Ainda assim, ' não é uma coisa divertida de se lidar. Você acaba tendo que devolver uma quantidade significativa da produtividade que ganhou quando saiu do C ++.
- Um começo que ' terá que reescrever totalmente.
Resposta
Então, estou falando sério sobre desenvolvimento de jogos, o Java ainda é uma escolha 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 sua razão para escolher Java é que você não conseguia entender C ++, seus programas Java não serão rápidos o suficiente para gráficos de alta qualidade. Usar uma linguagem de nível mais alto deve ser porque torna você mais produtivo, não porque você não consegue entender a linguagem de nível mais baixo.
Não acho que seja uma idéia totalmente ruim escrever um jogo em Java, especialmente se o jogo for simples, mas você imediatamente enfrentará problemas de desempenho em Java se estiver usando-o como uma muleta.
Então, em resumo, o Java pode ser levado a sério, para o desenvolvimento de jogos sério. Isso inclui gráficos pesados, jogo rápido sem atrasos e, possivelmente, e fácil mudança para consoles?
-
Gráficos pesados: possível, mas você vai fazer a mesma coisa em Java / LWJGL que em C ++ / GL: escrever bytes em buffers de GPU e / ou usar o listas de exibição obsoletas como o Minecraft. Se você não entende o gerenciamento de memória, também não vai fazer isso corretamente.
-
Jogo rápido sem atrasos: não é uma tarefa fácil em qualquer idioma e é mais provável que você dê um tiro no próprio pé de qualquer maneira sem pensar muito.
-
Não, Java não estará disponível em consoles.
Comentários
- Como uma questão secundária, o que substituiu as listas de exibição quando elas foram descontinuadas?
- @Suds: Pipeline programável, eu acredito.
- ha! já abordamos isso. VBOs : gamedev.stackexchange.com/questions/22170/…
- As plataformas móveis podem ser considerados consoles. Sei que ele provavelmente estava falando sobre os três grandes, mas o Android usa Java e muitos jogos são criados para ele.
- @ Amplify91 sim, alguns jogos são escritos em java para Android. Mas muito bom jogos e provavelmente todos os jogos com muitos gráficos ou multiplataforma são escritos em C ++ usando o Android NDK.
Resposta
Uma experiência um programador experiente geralmente conhece muitas linguagens de programação – aprender linguagens de programação extras não é muito difícil, uma vez que você conhece uma bem. No entanto, eu recomendo fortemente que C ++ não seja sua primeira linguagem, e provavelmente também não a segunda.
Isso ocorre porque o C ++ obtém grande parte de sua eficiência por não fazer nenhuma verificação significativa de erros de tempo de execução. Por exemplo, acessar um elemento no final de um array em Java sempre lançará uma exceção dizendo ao programador exatamente o que está errado.Em C ++, você pode ter sorte e travar imediatamente, mas com muita frequência eliminará silenciosamente alguns outros dados e o erro só aparecerá muito mais tarde .
Eu sugiro que você fique com o 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 linguagens mais seguras. C ++ é o que você vai precisar para a maioria dos trabalhos de desenvolvimento de jogos profissionais.
Observe que, com exceção de C # / XNA, obter um jogo que você escreveu em um console, no mínimo, requer que você configure uma empresa, com um escritório e tem um grande orçamento disponível para hardware de desenvolvimento e outras despesas.
Comentários
- Isso também é excepcionalmente verdadeiro porque outras linguagens além do C ++ irão dar a você uma sensação de realização. C ++ pode levar centenas de horas para o que pode parecer nada. Aprender outras linguagens primeiro permite que você comece a trabalhar.
- Seus comentários sobre a falta de tratamento de erros são realmente sobre C (e o chamado código C ++ que realmente é C). C ++ tem bibliotecas padrão (e bibliotecas de modelo padrão) que têm um tratamento de erros muito melhor do que o que você descreve. C ++ também tem bibliotecas fornecidas por fornecedores (como MFC) que fornecem tratamento de erros decente.
Resposta
Isenção de responsabilidade: Isso não responde exatamente à sua pergunta. No entanto, tentei mencionar (brevemente) alguns pontos que podem ser do seu interesse.
A razão de você ver tanto sobre C ++ é porque C ++ ainda é o padrão da indústria – a linguagem mais comum para consoles, etc.
Java não é usado com frequência. Minecraft é um jogo muito popular que se tornou grande com o Java; mas não é tão bom graficamente. Spiral Knights não é ruim – também feito em Java, com gráficos significativos.
Se você gosta de Java, C # é muito semelhante em sintaxe, com a vantagem de que pode interoperar com C ++ – então coisas de baixo nível podem ser feitas em C ++, se necessário. Unity pode usar C # para scripts e XNA é uma excelente escolha.
Novamente, Java não é amplamente usado. Se você gosta o estilo e a sintaxe, acho que você “achará o C # uma experiência de codificação muito semelhante e agradável.
Espero que seus sonhos o tornem, é” muito divertido ao longo do caminho:)
Comentários
- Muitas e muitas imprecisões nestas postagens. Minecraft " ruim " os gráficos não estão (fortemente) relacionados à linguagem. O mau desempenho do MC está diretamente relacionado ao Java ser uma linguagem ruim para jogos devido a ENORMES problemas de desempenho e LWJGL sendo uma biblioteca inadequada para grandes projetos de codificação pelo mesmo motivo . Mas o maior fator foi Notch
s má codificação e implementação, que está sendo corrigida … lentamente. C # oferece todos os recursos de memória gerenciada sem a maioria dos problemas de desempenho do Java. A desvantagem é que C # é fortemente centrado na Microsoft para jogos e aplicativos.
- @EfEs: Eu odeio dizer isso a você, mas a memória gerenciada é terrível para jogos e as pessoas que codificam jogos em XNA precisam gastar mais tempo gerenciando memória do que as pessoas que codificam em C ++. A natureza não determinística do GC significa que você deve agrupar praticamente tudo e evitar a alocação como uma praga – não da forma como a linguagem deveria ser usada.
- Esta resposta não era para ser 100% precisa ; Eu apenas citei exemplos sobre os quais conheço vagamente. Sinta-se à vontade para DV.
- @DeadMG Sei que C ++ é o caminho a percorrer, estava apenas tentando explicar que C # é melhor do que Java para jogos.
- Sendo C # há muito tempo desenvolvedor (não o pensamento do desenvolvedor de jogos) Eu acredito que pooling e gerenciamento de memória são grandes problemas para qualquer sistema mal projetado. Pessoas com a mentalidade C / C ++ e formas de desenvolvimento que eu conheço dificilmente se surpreendem com os padrões de memória gerenciada, design e arquitetura que devem ser usados e tiram proveito 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 que você use linguagens mais simples em termos de sintaxe (como Java e C #), ainda precisa de muita experiência para projetar seu jogo da maneira certa caminho.
Resposta
Olha cara, a resposta simples para “É Java viável para game dev “é um óbvio sim. Você pode usar qualquer linguagem de programação para fazer jogos. Isso não significa que você deve .
Provavelmente as mesmas coisas que o desvia do C ++ ( gerenciamento de memória de baixo nível, sem coletor de lixo, tendo que prestar atenção a ponteiros, estruturas como matrizes, etc.) são exatamente as coisas que você deve aprender se quiser explorar um computador recursos de forma mais eficiente .Seus jogos serão executados melhor se você estiver explorando os recursos do computador com mais eficiência.
O Java faz algumas coisas (como a verificação de limites de array) que apenas o tornam mais lento. Em neste código de exemplo de ruído Java Perlin otimizado, o autor comentou “(o acesso à matriz é muito mais lento do que o acesso ao membro)”. Esse tipo de coisa é bastante contra-intuitivo vindo de um fundo C ++. Java, essas coisas são.
Eu digo para parar de se esquivar, aprender C ++ e usá-lo.
Resposta
Isso não responde à sua pergunta; os problemas gráficos e de console parecem ser algo que você precisa muito considerar. O GC também afeta o desempenho. Mas sobre o que escrevo:
Se você estiver escrevendo programas grandes e complexos OO, os escreverá 5 vezes mais rápido em Java do que C ++. Além disso, a manutenção será muito mais fácil. Troquei, (reconhecidamente por software que não seja de jogo), e minha produtividade disparou. C #, outra boa alternativa, é mais difícil de aprender do que Java porque tem muito mais coisas. Quando você sabe disso, pode escrever código ainda mais rápido do que em Java; ele oferece muitos truques. No entanto, acho esses truques pode tornar a manutenção difícil. E há também o documento Java, que ajuda com as bibliotecas Sun e seu próprio código antigo. C # não tem nada parecido.
Eu fiz um grande jogo cabeludo em Java e achei a linguagem perfeita, mas meus gráficos eram elementares e não era “um jogo de tiro onde um décimo de segundo era uma eternidade para o jogadores. Além disso, espero acrescentar muito mais tarde, enquanto acho que a maioria das pessoas simplesmente escreve um jogo totalmente novo.
Resposta
Você deve fazer isso no idioma que você conhece melhor até que possa pagar uma educação formal (Bacharel em Ciências?) em Ciência da Computação, com ênfase em design de jogos . Você poderia usar seu jogo para conseguir uma bolsa de estudos, especialmente se puder dizer “Eu fiz isso sem nenhum treinamento formal em Java”
JVMs modernos, até mesmo o da Oracle, tem muitos, muitos recursos para atender às preocupações que as pessoas levantaram aqui. Você pode usar diferentes coletores de lixo para obter um comportamento mais determinístico do coletor de lixo. Não tenho muita experiência com bibliotecas 3D – apenas um pouco com Java3D – mas ninguém aqui parece ter reclamado delas. A análise de escape agora permite a elisão de bloqueio e alocação muito mais rápida / insignificante de objetos de vida muito curta.
O problema é que, independentemente de você escolher Java ou C ++, você terá que aprender a usar a simultaneidade de maneira adequada e ter um bom conhecimento de gerenciamento de memória. Afinal, você pode confundir com malloc
tão facilmente quanto com 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 com o IDE. Você pode usá-las para rastrear problemas de desempenho e aprender .
Comentários
- A educação formal em CS vale uma merda para as habilidades reais de programação em qualquer disciplina. Eu saberia, eu ' m no meu terceiro ano.
- Definitivamente discordo do DeadMG. Tendo me formado e escolhido cursos que gosto, o CS aumentou meus poderes de desenvolvimento de jogos de 10% a 100%. Não ' não me ensine IU, iconografia, etc., mas codificação real, real.
- @ ashes999: Então você teve sorte. Meu curso não vale nada e eu sei que lá muitos outros sentem o mesmo.
- @DeadMG it ' é difícil de ver quando você ' está estudando . Depois de trabalhar alguns anos F / T e aprender outras habilidades complementares, você ' verá. Sim. Mas talvez Eu apenas prestei muita atenção e tentei aplicar tudo ao meu passatempo de desenvolvimento de jogos.
- Eu ' diria que depende da escola e do professor. Tive algumas ótimas aulas de programação em que aprendi muito; e tive alguns em que realmente senti que perdi conhecimento ao frequentar. É ' tudo sobre ter um bom professor ou não. IMO.