ti-enxame.com

Slick2D vs Straight LWJGL

Eu tenho me aprofundado na programação de jogos com o Slick2D e comecei a me perguntar se, a longo prazo, saber que o LWJGL seria mais útil. Por um lado, o Slick2D é rápido e simples, mas parece que o LWJGL é mais adaptável no sentido de possuir recursos de 2D e 3D. Para alguém que é intermediário em Java e deseja criar jogos, valeria a pena o esforço adicional para aprender LWJGL logo de cara?

31
platypirates

Eu não acho que os dois estejam realmente relacionados. Quero dizer, eu sei que o Slick é construído sobre o LWGJL, mas não é isso que estou recebendo aqui.

O Slick existe para aproveitar os gráficos de hardware e a aceleração do som e dar esse poder aos jogos em 2D com um conjunto de objetos e classes que fazem sentido para os jogos em 2D (sprites e mapas de peças, em oposição a modelos geométricos e espaço de coordenadas em 3D). É isso aí - essa é a sua missão e foi criada para ser incrível na solução desse problema. O fato de o Slick ser baseado no LWJGL é simplesmente uma questão de o LWJGL ser uma biblioteca na qual você pode criar algo como o Slick. Na história das pessoas que tentam criar jogos em Java, o desempenho gráfico sempre foi um grande problema para obter algo de qualidade no mercado. O Slick remove essencialmente esse obstáculo para jogos 2D na área de trabalho (e, esperançosamente, no Android, algum dia).

Ao considerar Slick vs. LWJGL, é uma espécie de "ferramenta certa para o trabalho certo". Se você está construindo um jogo 2D em Java, o Slick é um ótimo caminho a percorrer. Se você está realmente construindo um jogo 3D (ou um jogo com uma visão 2D de cima para baixo, mas você precisa renderizar suas cenas em 3D), o LWJGL pode ser o seu melhor ponto de partida.

Se, no entanto, você está construindo um jogo 2D e acha que vale a pena construí-lo no LWJGL, 99% do que você construirá para fazer com que esse trabalho seja Sprites, animação, chave entrada, busca de caminho e som. O Slick já construiu essas coisas para você - você tem certeza de que está reinventando o volante e, por mais bem intencionado que seja, não o fará tão bem quanto os desenvolvedores que passaram anos trabalhando no Slick. A renderização de jogos em 2D é um problema resolvido - não perca seu tempo. A menos que você seja sério em mecanismos de renderização (eu nem estou falando sobre motores de jogo onde você gasta seu tempo trabalhando no jogo e na mecânica, mas na tecnologia de renderização real) você vai achar isso mais do que um pouco frustrante. A frustração não virá de ser um problema muito difícil de resolver (você certamente pode resolvê-lo), é apenas que você gastou meses construindo-o e, quando terminar, já terá alguns subconjuntos de recursos. incluído no Slick, mas não há jogo para mostrar. As pessoas inteligentes que criaram o Slick já resolveram os elementos de um mecanismo de jogo 2D em Java para você - tire vantagem do trabalho deles e não gaste meses tentando construir algo que está bem na frente de vocês.

Para fazer uma analogia final, a enorme explosão de jogos no PC no início dos anos 90 realmente aconteceu quando o DirectX chegou ao mercado. Claro que havia videogames desde o Atari, o Apple] [ o Commodore etc. etc.), mas houve uma explosão, um salto absolutamente enorme em jogos e tecnologia quando o DirectX veio a bordo e salvou os desenvolvedores de escreverem seus próprios drivers para som e vídeo.É literalmente o que os desenvolvedores tinham que fazer naquela época se estivessem escrevendo jogos - escrever ou licenciar drivers individuais para cada placa de som e vídeo em que eles queriam que o jogo fosse executado. O DirectX deu aos desenvolvedores a chance de parar de se preocupar com isso - apenas se preocupar que o hardware fosse "compatível com DirectX" para uma determinada versão e fosse minimamente poderoso para oferecer o desempenho de que eles precisavam, e era isso.

É difícil explicar o quão grande isso foi - mas se você estiver desenvolvendo jogos 2D em Java - Slick (ou uma das outras ferramentas de jogo disponíveis)) é o seu DirectX!

76
jefflunt

Resposta realmente legal da normalidade, eu só quero dizer que se você realmente deseja otimizar sua cena de desenho no Slick2D, você precisa saber que o método de desenho padrão do Slick usa um glBegin/glEnd.

Com muito Sprite (~ 10.000), esse método é realmente lento. Para evitar esse problema, você pode usar o método drawEmbedded em uma planilha Sprite muito grande ou criar seu próprio método com LWJGL. O melhor é fazer uma renderização VBO => http://lwjgl.org/wiki/index.php?title=Using_Vertex_Buffer_Objects_ (VBO ).

4
Cyril ALFARO