Desenvolver Jogos do zero(2D e 3D)utilizando JAVA

Boa tarde pessoal!!!

Gostaria de saber que tecnologias utilizar para programar jogos do zero utilizando Java?
Estava dando uma pesquisada aqui e encontrei a libGDX e LWJGL e que ambas utilizam OpenGL para a parte gráfica do jogo

Essas duas ferramentas que citei são as opções mais recomendadas para desenvolver jogos em 2D e 3D em java? Se sim qual o tipo de jogo que cada uma é mais recomendada?

No caso do Java, são provavelmente as mais comuns e disseminadas. Desconheço outras bilbiotecas para Java com alcance similar. O mais próximo deve ser a jMonkeyEngine.

Não acho que cada uma delas seja mais recomendada que outra. A libGDX usa a LWJGL, então elas estão conectadas.

De forma simplificada, a libGDX fornece mais facilidades e coisas prontas em comparação com a LWJGL, então, entre as duas, recomendo a libGDX pra quem está começando.

Abraço.

1 curtida

Vc consegue usar todas as funcionalidades de LWJGL dentro de libGDX?

A libGDX “abstrai” as funcionalidades da LWJGL (e de outras bibliotecas), então você normalmente não precisa acessar nada da LWJGL a partir dela. Se você precisa acessar diretamente a LWJGL, é melhor usá-la diretamente, em vez de usar a libGDX.

Em uma simplificação extrema, imagine a situação que você quer desenhar um quadrado verde na posição horizontal = 100 e vertical = 200. Uma biblioteca de nível mais baixo (como a LWJGL) poderia ter algo assim:

Matriz pontos = nova Matriz();

pontos.adicionarPonto(0, 0);
pontos.adicionarPonto(10, 0);
pontos.adicionarPonto(10, 10);
pontos.adicionarPonto(0, 10);

ObjetoComCoordenadas quadrado = novo ObjetoComCoordenadas(pontos);

Cor corVerde = nova Cor(0, 1, 0);

classeDeDesenho.mudarACorPara(corVerde);
classeDeDesenho.mudarPosicaoDoPincelDeDesenho(100, 200);
classeDeDesenho.desenharObjeto(quadrado);

Enquanto que uma biblioteca de mais alto nível (como a libGDX), poderia fazer algo como:

//parâmetros são posicao horizontal, vertical, largura, altura e cor
ClasseGlobalDeDesenho.desenharObjetoRetangular(100, 200, 10, 10, CoresPadrao.VERDE);

Note que ambas fazem a mesma coisa, apenas de forma diferente, e a segunda pode abstrair todas as operações da primeira. Ou seja, dependendo do seu objetivo, usar uma ou outra é mais viável.

Abraço.