Não sou desenvolvedor de jogos nem nada, mas sei que o Java não é muito usado no desenvolvimento de jogos. O Java deve ser rápido o suficiente para a maioria dos jogos, então onde está o problema? Eu posso pensar em alguns motivos:
- Falta de desenvolvedores de jogos com experiência em Java
- Falta de boas estruturas de desenvolvimento de jogos
- Os programadores não querem aceitar Java como uma linguagem de programação de jogos. A maioria só aceita C ++ como isso?
- Não há suporte para consoles de jogos (embora o mercado de PCs ainda exista)
Claro que poderia ser outra coisa. Alguém que conhece os negócios melhor do que eu poderia explicar por que o Java não está ganhando impulso no que diz respeito ao desenvolvimento de jogos?
java
game-development
Anto
fonte
fonte
Respostas:
Várias razões:
Atualmente, o Java é usado principalmente em jogos Android, simplesmente porque é o idioma principal dessa plataforma.
fonte
malloc
ounew
, portanto, se isso for uma preocupação, você implementará o pool, não importa o quê. Independentemente desse ponto, um grande problema do Java é que ele não suporta tipos de valor, ao contrário do C #.Razões técnicas:
Razões não técnicas:
Curiosamente, também existem algumas boas razões pelas quais os desenvolvedores de jogos devem considerar Java:
fonte
Ok, há muita desinformação neste tópico.
Eu conheço o negócio de jogos extremamente bem, tendo estado nele por 25 anos. Eu também conheço Java em jogos extremamente bem, tendo sido o evangelista técnico da Sun Game em Java e lecionando como especialista em programação de desempenho em Java.
Em termos de velocidade computacional, o Java supera o C ++ em muitos benchmarks de computação científica atualmente. Você pode escrever um código patológico em qualquer idioma que tenha um desempenho ruim, se quiser, mas, no geral, eles estão no mesmo nível e estão por um longo tempo.
Em termos de uso de memória, Java tem alguma sobrecarga. HelloWorld é um programa 4K em java. Mas essa sobrecarga não faz muito sentido nos sistemas atuais de vários GB. Finalmente, Java tem mais tempo de inicialização. Eu não recomendaria o uso de Java para utilitários de tempo de execução curtos, como comandos de linha de comando do Unix. Nesses casos, a inicialização dominará seu desempenho. Em um jogo, no entanto, é bastante insigrante.
O código do jogo Java corretamente escrito não sofre pausas no GC. Assim como o código C / C ++, ele requer algum gerenciamento de memória ativa, mas não no nível C / C ++. Contanto que você mantenha o uso da memória em objetos de vida longa (persistir por um nível ou jogo inteiro) e objetos de vida muito curta (vetores e tais, passados e rapidamente destruídos após o cálculo), o gc não deve ser um problema visível.
Em termos de acesso direto à memória, Java tem isso há muito tempo; desde o Java 1.4 na forma de buffers nativos de bytes diretos. A modificação de bits no Java pode ser um pouco irritante devido à falta de tipos inteiros não assinados, mas as rodadas de trabalho são bem conhecidas e não são terrivelmente onerosas.
Embora seu verdadeiro Java nunca tenha sido vinculado ao Direct3D, é porque as tecnologias Java buscam a portabilidade. Possui DUAS ligações OpenGL (JOGL e LWJGL) e OpenAL (JOAL) e uma ligação de entrada portátil (JInput) que se vincula ao DirectInput no Windows, HID Manager no OSX e uma ligação do Linux (eu esqueço).
É verdade que nenhum mecanismo de jogo completo apresentou o Java da maneira, digamos, o Unity, o C # e isso é uma fraqueza no espaço independente. Por outro lado, havia dois bons APIS no nível Scenegraph que eram totalmente portáteis em plataforma Windows, OSX e Linux. Ambos escritos por Josh Slack, o primeiro foi chamado JMonkey engine e o segundo Ardor3D.
O pôster principal está correto que as duas maiores coisas que atrasaram o Java no desenvolvimento de jogos foram preconceito e portabilidade. Este último foi o maior problema. Embora você possa escrever um jogo Java e enviá-lo para Windows, OSX e Linux, nunca houve uma VM de console. Isso ocorreu devido à total inaptidão na gerência intermediária da Sun. Os poucos de nós que trabalhamos em Java em jogos realmente negociaram com a Sony nada menos que três vezes para obter uma VM em um Playstation e todas as três vezes em que a gerência média da Sun a matou.
Embora a Sun tenha flertado com as tecnologias dos clientes, o fato é que o gerenciamento da Sun nunca recebeu produtos de consumo. É por isso que o Java como linguagem cliente da Sun nunca teve sucesso de nenhuma forma e por que o Google e o Dalvik (a VM do tipo java do Android) fizeram do Java uma plataforma bem-sucedida em qualquer lugar.
E é por isso que eu codigo jogos em C # hoje. Porque Mono foi para onde a gerência da Sun se recusou.
fonte
Java é ótimo para lógica de negócios, servidores e código independente de plataforma que precisa ser executado de maneira confiável. Existem vários fatores pelos quais o Java não é frequentemente usado em jogos:
Não é fácil trabalhar com bibliotecas C ++ de linguagens de bytecode como Java (gravando uma camada JNI) e .net (muitos atributos de empacotamento / desmarcação, api / estrutura). Por isso, acrescenta bastante trabalho para pouco benefício.
Uma observação: alguns servidores de jogos usam Java.
Artigo similar aqui : https://stackoverflow.com/questions/1034458/why-arent-video-games-written-in-java
fonte
Java não é rápido o suficiente para a maioria dos jogos. É muito mais lento do que usar C ++ / Assembly, que é o padrão. É a mesma razão pela qual o desenvolvimento de jogos não é feito usando C # ou VB. Os desenvolvedores de jogos precisam e planejam todos os ciclos do relógio em que podem trabalhar, como cálculos de física, lógica de IA e interações com o ambiente.
Para jogos mais simples, o Java pode ser usado com bastante eficiência. Se você deseja criar um clone do Tetris ou um Bejeweled, ou qualquer outra coisa com esse nível de detalhe, o Java funcionaria bem. Mas o Java não pode criar jogos como Halo, Medal of Honor, Command & Conquer, etc., e torná-lo jogável. Pelo menos como existe hoje em dia.
E os motivos que você lista na sua pergunta também são válidos. Exceto, eu acho, pela falta de desenvolvedores de jogos com experiência em Java. Muitos jogos em telefones e outros dispositivos portáteis são escritos em Java (incluindo a maioria dos jogos para Android), e alguns são excelentes. Então, acho que há uma base decente e crescente de desenvolvedores de jogos com conhecimento em Java.
O pensamento está mudando na capacidade de usar essas linguagens de nível superior em alguns dos jogos mais avançados. Por exemplo, um dos meus jogos favoritos, o Train Simulator da Auran, é escrito com grandes porções em C # e funciona muito bem. Portanto, a base está crescendo e continuará a evoluir.
fonte
Os jogos modernos são sobre gráficos 3D que acontecem em hardware para fins especiais.
Mesmo em 2002, Jacob Marner descobriu em seu relatório "Avaliando Java para desenvolvimento de jogos" que o Java era bastante utilizável para jogos, exceto pelas partes mais dependentes do desempenho, e devido à robustez da linguagem e da JVM subjacente, era mais barato fazer assim.
http://java.coe.psu.ac.th/FreeOnline/Evaluating%20Java%20for%20Game%20Development.pdf
É minha opinião pessoal que, com o progresso que ocorreu desde então, especialmente nos gráficos 3D, e com as excelentes ligações com OpenGL et al, essa desvantagem é muito menos acentuada atualmente.
Portanto, o problema deve estar em outro lugar. Uma razão provável é o tamanho do tempo de execução Java (que é muito menos um problema nos dias de hoje com jogos com vários DVDs) e outra a inércia do código existente. É notoriamente frágil começar a trabalhar com código nativo em Java. Um terceiro motivo é o que os desenvolvedores famosos que estão fazendo os jogos estão familiarizados. Um quarto é se o Java está disponível na plataforma.
Porém, uma coisa é certa - a maioria dos jogos passa a ser programável em vez de ter tudo gravado no código C desde o início, e você deseja o melhor tempo de execução embaixo da sua linguagem de script. Atualmente, isso significa essencialmente o CLR ou a JVM.
fonte
Os desenvolvedores de jogos gostam de estar próximos do metal e geralmente escrevem seus apertados circuitos internos na montagem. Java não oferece o mesmo nível de desempenho possível, em termos de velocidade consistente ou uso de memória (a execução de um JIT cobra seu preço).
fonte
Eu acho que o fator limitante para a maioria das pessoas é a (falta de) disponibilidade de bons mecanismos de jogo. Para ir muito longe, precisamos analisar por que eles não estão disponíveis.
Eu olharia isso da outra direção por um momento. Desenvolver um mecanismo de jogo (por exemplo) é muito trabalhoso. Quem se beneficiaria o suficiente com o desenvolvimento de um para investir tempo e esforço para fazê-lo?
A maioria dos candidatos óbvios ao desenvolvimento de estrutura em / para Java (por exemplo, IBM, Oracle) parece não ter interesse em jogos. Os candidatos óbvios ao desenvolvimento de jogos (por exemplo, Id, EA) parecem ter quase igualmente pouco interesse em Java.
Quase o único candidato que consigo pensar que parece razoável seria o Google. A principal linguagem de desenvolvimento para o Android é Java, e o incentivo ao desenvolvimento de jogos para Android pode fornecer uma vantagem real para a plataforma.
Até onde eu sei, eles ainda não o fizeram (ainda?), O que deixa alguns limites bastante severos para quase todo mundo. Sem muito no caminho dos mecanismos de jogos modernos e de alto desempenho para usar o desenvolvimento em Java, significa um pouco de trabalho extra, com (o que me parece) poucas perspectivas de produzir muitos benefícios em troca desse trabalho extra.
fonte
A questão está no mesmo nível de perguntar algo nas linhas de:
O que é melhor para alimentar o seu carro, um motor de barco ou a jato.
Tudo se resume a escalabilidade, prevenção de erros, velocidade, assinatura de memória, modularidade e uma série de coisas. A questão não deve ser sobre o que é melhor como padrão do setor, a questão deve ser "o que é melhor para mim", como o que você sabe ou o quão bem você o conhece. Se ele faz o trabalho, ele faz o trabalho; se você pode realmente vender a idéia, ela funciona e quem sabe você pode até dobrar algumas colheres.
fonte
O Java não foi feito com o desenvolvimento de jogos em mente, o Java foi feito para ser uma linguagem "para a web".
Quanto ao desenvolvimento de jogos, a Sun realmente não suportava Java como uma linguagem de desenvolvimento de jogos, pois a Microsoft apoiava o C #.
Eu acho que a falta de estruturas de desenvolvimento de jogos convincentes é o que realmente matou o Java nesse aspecto.
fonte
É mais fácil colar C mais diretamente em novos drivers e hardware não convencionais. Quanto mais cedo e mais perto um programador de jogos puder chegar do hardware, melhor eles poderão superar os jogos concorrentes. Os programadores de jogos posteriores mantêm a mesma metodologia e ferramentas dos jogos anteriores comprovados.
Para jogos em que a otimização para o hardware mais recente é menos importante, como jogos casuais para celulares, usar C dessa maneira é menos importante do que a maior portabilidade do Java.
fonte
Para algumas pessoas, a razão não tem nada a ver com velocidade, bibliotecas ou disponibilidade. É simplesmente por causa da própria linguagem. Algumas pessoas simplesmente não gostam da linguagem Java. Outras pessoas preferem usar sua linguagem de programação favorita em vez de usar Java para criar jogos.
fonte
É uma linguagem de interpretação, ou seja, lenta. Você está lidando com placas gráficas e gráficas que são de hardware. Qual é uma boa linguagem para lidar com hardware? Bem, C ++, é bem baixo, e você lida com indicadores e o que for.
Se você deseja criar gráficos malucos como o crysis e o que quer que seja, não fará o Java por ele.
Além disso, a Oracle possui Java, o pensamento de que uma empresa pode processar você não é muito ousado. Especialmente quando você deseja criar seu próprio intérprete para JAVA para segmentar jogos sem ser processado devido à fragmentação do FUD.
fonte