Minecraft pesado?

Opa pessoal tranquilo? então já ouviram falar daquele joguinho chamado minecraft? :smiley: Um jogo viciante e mundialmente famoso desenvolvido em java, mais informações em http://pt.wikipedia.org/wiki/Minecraft.

Enfim quem já jogou pode notar que o jogo é relativamente pesado para os gráficos que ele tem, fico pensando se java seria uma boa mesmo pra esse tipo de coisa (jogos) pelo menos não daquele porte, não sei como funciona o motor gráfico dele parece que ele usa o OpenGL mais é extremamente pesado :frowning: e sem falar que se você for rodar um servidor em sua máquina ela quase não aguenta o tranco de tão pesado que fica, o curioso foi que fizeram uma versão para o xbox 360 feita em .net e ficou muito mais leve.

Bem qual é a opinião de vocês em relação a isso?

Obs: Acredito que postei sem querer querendo na área errada :lol: acho que seria mais off topic, algum modera poderia fazer a gentileza? rsrs

Já existe uma looonga discussão sobre isso aqui:

A plataforma java, pura, não é adequada para jogos. O Minecraft usa JNI para as seguintes funções (que não existem na plataforma Java):
a) Desenho dos gráficos;
b) Entrada de dados;
c) Sons 3D.

O que fica fora do java é a parte lógica, e a engine que organiza os gráficos (servidor, carga de texturas, etc). Muitas engines modernas usam linguagens de alto nivel para essas tarefas.

Outro exemplo de jogo híbrido usando Java é o Taikodom, que inclusive é brasileiro:
http://www.taikodom.com.br/

Na minha opinião, Java é uma das piores linguagens que você poderia escolher para jogos.

Outros problemas do java para jogos são:
a) Total falta de apoio pela Sun e agora pela Oracle;
b) Comunidade de jogos praticamente inexistente;
c) Engines profissionais praticamente inexistentes (AndEngine, Slick2D?, JMonkey);
d) Suporte a poucas plataformas de interesse para o mercado de jogos (Android, Windows e o que mais?). Total falta de suporte (e interesse) por parte da indústria de consoles;
e) Nenhum controle do garbage collector;

No caso do Android, a plataforma Android é adequada. Entretanto, há boas engines em outras linguagens (Flex, CocosX e até QT) que permitem fazer jogos similares para multiplos dispositivos móveis.

PS: Apenas para os fãboys não alegarem o que alegaram na outra discussão. Estamos falando de “games” aqui jogos como o Minecraft e o Taikodom citados. Não jogos que parecem páginas web ou jogos sociais praticamente estáticos.

PPS: O java é uma ótima linguagem para se fazer um servidor de um MMO.

PPPS: Há uma distinção importante aqui. Não estou falando ser impossível fazer um game “usando Java” como parte da tecnologia. Mas estou falando sobre a plataforma Java ser ou não completa para games. Se considerar puramente a plataforma java, e não bindings de terceiros (pois esses não são parte da plataforma), você teria apenas a possibilidade de fazer games 2D. Outra coisa para os desavisados de plantão bindings de terceiros != bibliotecas de terceiros. A diferença está no fato de que bindings são escritos usando código nativo e rodam fora da VM.

Bom sou meio suspeito pra falar mais pensando em jogos grandes realmente java parece inviável, talvez o c++ seja o preferido dos estúdios por ter mais controle da máquina gerenciamento de memória e etc, parece que esse ainda não é o forte da JVM, falo porque testei o Minecraft em duas máquinas distintas, uma com um corei7 16gb’s de ram e uma placa de vídeo boa e outra com um dual core 2gbs de ram e uma placa de vídeo mais ou menos, ambas quando você anda até determinado ponto e começa a gerar o mapa da uma pane no jogo e um travamento geral.

Outro esclarecimento. O “peso” da linguagem não deve ser um fator crítico. Em games 3D mais top, o que mais pesa é a comunicação entre a placa de vídeo (GPU) e a CPU. Em segundo lugar está a GPU em si. E, por último, vem a CPU (exceção apenas para games de estratégia em tempo real). No caso de MMOs, a rede também tem um papel importante na perda de desempenho. Enfim, são tantos gargalos externos que é por isso que muitas engines, como a Unity e a UDK, usam até linguagens de script para a lógica do jogo (JavaScript ou Boo no caso da Unity, UDKScript no caso da UDK).

Provavelmente as versões para X-Box e para Dispositivos móveis não ficaram mais leves por causa da linguagem, mas pq o Notch teve a oportunidade de “passar a limpo” e ajeitar alguns detalhes do código nesses trechos específicos.

Sem falar na arquitetura sensacional do X-Box, e no fato de ser um hardware extremamente controlado (vc sabe que todo player vai ter o mesmo hardware, e nenhum anti-vírus vai resolver fazer um scan no meio do game).

Tem outros motivos:
a) Legado: Os estúdios tem muita coisa desenvolvida;
b) Pioneirismo: Hardwares novos são primeiro suportadas em C++;
c) Portabilidade: Única linguagem que está presente em absolutamente todas as plataformas.
d) Proteção: É virtualmente impossível descompilar um código C++.
e) Comunidade: Há um número absurdamente grande de componentes para C++, desde bibliotecas para desenhar árvores (SpeedTree), até as mais avançadas engines de física (Havoc).

Não sei especificamente do Minecraft, mas isso que vc reportou é mesmo bastante estranho. E tem cara mesmo de problema na CPU.

No Brasil, uma engine muito popular é a Unity. Ela está presente no Toren e no Legend Alive. E em outros jogos menores (como o game indie Billy Oposto).

O Minecraft usa usa LWJGL (http://www.lwjgl.org/). Uma biblioteca que tem bindings pra OpenGL (gráficos 3D), OpenAL (sons) e mais algumas coisas para input. Eles são basicamente um mapeamento dos métodos API para métodos de uma classe estática. Ou seja, é bem tranquilo pegar um livro em C++, por exemplo, portar os exemplos para Java + LWJGL.

O Minecraft nasceu em java porque o cara não tinha intenção de fazer esse sucesso todo. Era algo que ele tava fazendo no tempo livre, pra se divertir e deu certo. Se fosse algum grande estúdio, provavelmente tomaria um caminho diferente.