Desde que comecei a usar o Java eu tenho essa dúvida. não me refiro a jogos para celular etc, mas para desktop, que possa competir com os mais populares do mercado.
Até onde eu sei o java tem suporte para opengl, modelos 3D etc… mas na hora de criar um ambiente virtual, enfim, criar um jogo, a linguagem responde bem?
outro problema é a questão da lentidão, escuto muito falar que java é lento, porem para o uso que faço eu nem sinto isso. mas, no caso de um jogo isso é sentido?
sei que a maioria dos grandes jogos são feitos em C++… por isso fiquei com essa dúvida apenas uma curiosidade, o que vocês acham?
Olha, Jogos para desktop ainda é dos poucos mercados onde Java apanha feio! rs
A questão do desempenho é tão importante neste mercado que muitos jogos não usam somente c++, como também Assembly ou algo mais baixo nível que C/C++!
Apesar disso, progressos tëm sido feitos. Só que até o momento, nunca vi uma “Killer Game Aplication” em Java.
Mas isto não quer dizer que Java seja ruim. Talvez o paradigma do desempenho do Java esteja tão encravado na cabeça dos desenvolvedores de jogos que ninguém teve coragem de investir alguns milhares de dólares em algo tão arriscado quando “jogos em Java”.
Você pode encarar isso de duas maneiras:
[list]Pessimista: Esquece! Eles NÃO usam sapatos… [/list]
[list]Otimista: Oba! Eles AINDA NÃO usam sapatos! :lol: [/list]
Fizeram um port da engine do Quake 2 para java. Chamaram de Jake. Já ouvi falar que o desempenho da engine java é superior ao da engine c++, porém não sei se é verdade mesmo. Eu creio que a questão da velocidade não é mais problema na linguagem java. O que faz um jogo ser bom não é linguagem em que ele foi feito.
Concordo com o ACDias que o que faz um jogo bom não é a linguagem.
Apesar de Java ter um desempenho similar e algumas vezes até superior ao C++ em certos aspectos, tem um deles que tem importância vital nos jogos e é onde Java perde: operações com números flutuantes.
Confesso que não sei como está este aspecto na Java 5 e Java 6, mas até a 1.4, o Java perdia. E isso conta muito na hora de desenvolver jogos, porque a indústria dos games dá ênfase demais em realismo/gráficos, mesmo que o jogo saia uma droga! Os caras são maníacos por desempenho!!!
Tiago, observe uma coisa. A dificuldade de se fazer jogos em Java é trabalhar com 3D. A depender do tipo de Jogo, creio que Java pode se sair muito melhor que C++.
Numa palestra sobre Jogos em Java do Sun Tech Days de 2005 escutei uma frase interessante do palestrante: “antigamente o programador colocava a culpa no processador pra justificar a lentidão do jogo, hoje ele culpa a linguagem”.
Realmente os jogos antigos baseados em Z-80 (leia-se Tk-90, MSX,etc.) tinham somente 16 ou 32Kb para fazer os jogos e os malucos da época programavam só em Assembly para ficar rápido e em cima disso várias otimizações de código em cima. E conseguiam… impressionante…
Hoje já tem jogo que pede 1 Giga de RAM e mesmo com uma placa de vídeo boa não é tão rápido assim
C++ ainda domina o desenvolvimento de Jogos, mas acredito que isso mude com o tempo e abra um espaço para o Java e outras linguagens interessantes como Lua e LISP (vejam o game Abuse).
Cada linguagem oferece uma facilidade para alguma coisa, portanto acredito que a tendência mesmo é que os jogos não usem 100% Java, mas provavelmente use-o para uma engine interna ou algo do tipo.
A linguagem já consegue, o que falta é os programadores de jogos fazerem os jogos em java… por exemplo, o guj aqui está com uns 10000 usuários, desses, se tiver uns 20 interessados no assunto já acho que é muito, o pessoal do java parece estar sempre interessado mais em JEE, em framework web, e coisas do gênero que normalmente são chatas hehehe.
Eu por exemplo me interesso pelo assunto, já fiz jogos em C e C++, mas ainda nenhum completo pra java… um dia talvez eu faça um port dos meus 2 joguinhos humildes pra ela hehe.
Hoje java já tem opengl, então tudo fica fácil se já souber como trabalhar com ela, o que não é meu caso.
[quote=josenaldo] Confesso que não sei como está este aspecto na Java 5 e Java 6, mas até a 1.4, o Java perdia. E isso conta muito na hora de desenvolver jogos, porque a indústria dos games dá ênfase demais em realismo/gráficos, mesmo que o jogo saia uma droga! Os caras são maníacos por desempenho!!![/quote]Não posso afirmar porquê não sei, mas acho isso não é mais problema nas versões recentes da JVM.
[quote=josenaldo] Tiago, observe uma coisa. A dificuldade de se fazer jogos em Java é trabalhar com 3D. A depender do tipo de Jogo, creio que Java pode se sair muito melhor que C++.[/quote]Eu já acho o contrário, as bibliotecas java pra manipulação 3D estão muito mais fáceis de se usar que as de outras linguagens. A API Java3D tem suporte a Opengl e Directx, mas existem outras que são muito boas também.
[quote=boaglio] C++ ainda domina o desenvolvimento de Jogos, mas acredito que isso mude com o tempo e abra um espaço para o Java e outras linguagens interessantes como Lua e LISP (vejam o game Abuse). [/quote]Lua já largamente usada em jogos, normalmente para controlar o comportamento dos npcs, existem bibliotecas c++ para carregar e executar os scripts lua. O melhor disso é que a linguagem é 100% brasileira.
Josenaldo, seus postos são maravilhosos aqui, mas realmente discordo desse seu post.
A questão não é somente a linguagem, e sim a ponte que Java possa fazer com outras APIs (diga-se bibliotecas de computação gráfica).
O Java pode acessar o OGL de forma direcional, do qual todo o processamento gráfico fica com a biblioteca e não com a linguagem em si. A chamada nativa traz benefícios de velocidade, pois não é o Java que irá renderizar uma imagem, um vertex, um shadow, nem nada desses recursos.
Então lá vem a pergunta, Java é viável para jogos 3D? Sim, desde que se usa as libs corretas e podendo sempre que possível optimizar o código.
Mas claro que mesmo assim o desempenho final será difícil de se igualar a um jogo feito em (c/c++, asm e Lua). Mas de qualquer forma poderemos ter ótimos resultados com Java. Mas infelizmente as melhores engines gráficas ainda não estão disponíveis, vide a Crysis e a Unreal Engine 3.
Fora que em Java temos a vantagem da “facilidade”, então se você quiser construir um jogo belo, com bons gráficos, é sim possível com Java.
Tentem programar em DX, é um parto, OGL é mais ligth, tb o OGL é menos abrangente que o DX, pois é direcionado para apenas gráficos 3D, enquanto o DX é uma engine composta de vários recursos, que vai desde som a gráficos em gerais.
[quote=Grinvon]Tentem programar em DX, é um parto, OGL é mais ligth, tb o OGL é menos abrangente que o DX, pois é direcionado para apenas gráficos 3D, enquanto o DX é uma engine composta de vários recursos, que vai desde som a gráficos em gerais.[/quote]Sou obrigado a concordar com você. É um porre aqueles milhares de parâmetros que cada método do DX possui e que na maioria você sempre coloca nulo, e isso nem é o pior: você entra na referência da API e a própria diz que aquele parâmetro deve ficar nulo mesmo. Resumindo, ele não serve pra nada!
De repente vc precisa de recursos que o java não pode te dar, por exemplo, se vc quiser fazer um jogo pra Snes (teria q fazer em C, mas ninguem vai fazer um jogo pra Snes AGORA né?).
Uma vez me passaram o seguinte desafio: criar um jogo simples, modo texto, com ate 4 salas, que fosse interessante. Eu tentei por meses e ficou muito ruim simplesmente por que eu não consegui pensar em um jogo simples e, ao mesmo tempo, bom. Nem posso culpar a linguagem ou a engine 3D.
Acho que a pergunta deveria ser “vale a pena usar Java para criar jogos que precisem do recurso X ?”. Por que se vc conseguir compensar alguma “deficiencia do Java” com criatividade, a pergunta ja está respondida.
Digo deficiencia do Java tanto a ‘lentidão’ mitica da linguagem quanto até mesmo a sua inexperiencia de produzir com as APIs 3D mega fodonas algo ao seu gosto.
A linguaguem ainda é motivo de confusão para mim, talvez pq ainda sou novato.
mas vejá só, um amigo meu tá escrevendo um jogo em Object Pascal, usando openGL e o jogo tá massa, bem funcional e tal… agora o engineer ele tá fazendo do zero… sei que apenas um cenário com um modelo e uns itens jogados no chão custaram boas horas de programação :O!
procurei por recursos em java para estudar, apenas por nível de curiosidade e notei que java tem uma carência muito grande quando o assunto é criação de jogos.
alguém tem conhecimento de algum livro bom?
eu encontro informação para mobile edition e outras coisas menores, mas nada grande que chegue a envolver bibliotecas gráficas como opengl/directx etc…
olha só, continuei pesquisando aqui no site que o dudas passoui: https://jogl.dev.java.net/ fiz um teste inclusive com o código que encontrei aqui: http://en.wikipedia.org/wiki/JOGL e até funcionou direito, mas esse “jogl” possíbilita a importação de modelos feitos em programas tipo Maya, 3dsmax, xsi etc? modelos .obj ?
é possível criar jogos c/ ele ou ele seria para outra funcionalidade?
e esse jogl é feito pelo time do java ou é de terceiros?
[quote=tiagomac]mas esse “jogl” possíbilita a importação de modelos feitos em programas tipo Maya, 3dsmax, xsi etc? modelos .obj ? [/quote]Acho que isso você vai ter que fazer por conta própria. Porém até onde eu sei nenhum api c++ possibilita carregar arquivos desses formatos, normalmente os programadores criam loaders próprios para esses arquivos. Para carregar objetos 3d eu sei que o DX carrega o formato .x nativamente a engine ogre3d carrega formatos .mesh, ambos para c++. A api Opengl que eu saiba não carrega nenhum modelo nativamente, creio que você deva fazer seus loaders.
[quote] é possível criar jogos c/ ele ou ele seria para outra funcionalidade? [/quote]Sim.
[quote] e esse jogl é feito pelo time do java ou é de terceiros? [/quote] É desenvolvido pela Sun assim como como Java3D, sendo que este último permite trabalhar não só com OpenGL, mas DirectX também tornando seus jogos compatíveis apenas com a plataforma windows (argh).