Criando um jogo no LWJGL # 1
Escrever um jogo é um processo complexo e interessante que leva muito tempo. Nesta série de artigos, mostrarei como criar um jogo Java 3D simples usando a biblioteca LWJGL.
Para criar seu jogo, você precisa do seguinte:
- Capacidade de escrever código em Java (um mínimo necessário: entender a operação de condições, loops, strings, matrizes, funções, classes)
- Ambiente de Desenvolvimento (usarei o Eclipse)
- Biblioteca LWJGL
- Placa de vídeo compatível com a versão OpengGL não inferior a 3,3
- Tempo livre
- Idéia
Quem se importa, por favor, debaixo do gato.
Etapa 1, Preparação
Como instalar o eclipse .
Faça o download do
LWJGL 2.9.3 , uma biblioteca de gráficos 3D,
adicione -o ao seu projeto.
Baixe o
slick-util , uma biblioteca que simplifica o carregamento de texturas, adicione-a ao projeto.
Etapa dois, verifique
Primeiro, crie a classe Main no pacote principal e insira o seguinte código:

Se a linha com entrada não estiver destacada em vermelho, tudo estará correto (destacado em amarelo na tela, porque esta biblioteca ainda não está sendo usada no código).
Etapa três, exibição
Preencha a classe Main com o seguinte código:
Código inicialimport org.lwjgl.LWJGLException; import org.lwjgl.opengl.Display; import org.lwjgl.opengl.DisplayMode; public class Main { static int width = 800, height = 600; static DisplayMode mainDisplayMode = new DisplayMode(width, height); static boolean running = true; static void update() { if (Display.wasResized()) { width = Display.getWidth(); height = Display.getHeight(); } Display.update(); Display.sync(60); if (Display.isCloseRequested()) { running = false; } } public static void main(String[] args) { try { Display.setLocation( (Display.getDesktopDisplayMode().getWidth() - mainDisplayMode.getWidth()) / 2, Display.getDesktopDisplayMode().getHeight() - mainDisplayMode.getHeight()) / 2); Display.setResizable(true); Display.setVSyncEnabled(true); Display.setDisplayMode(mainDisplayMode); Display.create(); } catch (LWJGLException ex) { System.err.println(ex.getStackTrace().toString()); Display.destroy(); System.exit(1); } while (running) { update(); } Display.destroy(); System.exit(0); } }
Então, o que está acontecendo aqui:
Display.setLocation( (Display.getDesktopDisplayMode().getWidth() - mainDisplayMode.getWidth()) / 2, (Display.getDesktopDisplayMode().getHeight() - mainDisplayMode.getHeight()) / 2); Display.setResizable(true); Display.setVSyncEnabled(true); Display.setDisplayMode(mainDisplayMode); Display.create();
Nestas linhas:
- define a posição de exibição (no centro da tela)
- permitido redimensioná-lo
- sincronização vertical ativada
- defina DisplayMode que armazena tamanhos de tela e alguns outros parâmetros
- na última linha, a exibição é criada e exibida na tela.
static void update() { if (Display.wasResized()) { width = Display.getWidth(); height = Display.getHeight(); } Display.update(); Display.sync(60); if (Display.isCloseRequested()) { running = false; } }
Na função de atualização, chamada em um loop infinito:
- Janela Verificar redimensionamento
- Atualização de exibição
- Na linha Display.sync (60), o display é sincronizado com 60 hertz (se você tiver uma frequência diferente de atualizações da tela, por exemplo, 59, 76, 120, 144, etc., defina sua frequência).
- Janela Fechar Verificação
Observe como o programa termina quando o usuário clica na cruz, o sinalizador de fechamento da janela, Display.isCloseRequested () se torna verdadeiro, e a variável em execução se torna falsa, e a próxima iteração que o loop while (running) não será executado e haverá uma transição para as linhas de Display .destroy (), que destrói a exibição e System.exit (0), cuja chamada termina o programa.
Etapa quatro, OpenGL
Para inicializar o OpenGL na função principal antes do loop while (em execução), você precisa adicionar o seguinte código:
if (!GLContext.getCapabilities().OpenGL33) { System.err.println(" OpenGL 3.3."); System.exit(0); }
Este código verifica se a placa de vídeo suporta o OpenGL 3.3. Se a placa de vídeo não suportar esta versão, tente atualizar o driver ou mudar para outra placa de vídeo (se você tiver mais de uma).
Portanto, a verificação está concluída. Se tudo estiver bem, a placa de vídeo suporta o OpenGL 3.3, seguimos em frente. Após o código de verificação, antes do loop, adicione o seguinte código:
glShadeModel(GL_SMOOTH); glEnable(GL_TEXTURE_2D); glEnable(GL_DEPTH_TEST); glClearColor(1f, 0f, 0f, 1f);
Este código irá configurar o OpenGL da seguinte maneira:
- Ativar iluminação suave em shaders
- Ativar texturas
- Ativa a verificação de profundidade (para que os objetos próximos se sobreponham aos distantes)
- Definir cor de limpeza
No loop while (running), antes de chamar a função update (), adicione a linha
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
O que limpará o buffer de cores e o buffer de profundidade sempre que a tela for atualizada.
Código final
Clique para ver import static org.lwjgl.opengl.GL11.GL_COLOR_BUFFER_BIT; import static org.lwjgl.opengl.GL11.GL_DEPTH_BUFFER_BIT; import static org.lwjgl.opengl.GL11.GL_DEPTH_TEST; import static org.lwjgl.opengl.GL11.GL_SMOOTH; import static org.lwjgl.opengl.GL11.GL_TEXTURE_2D; import static org.lwjgl.opengl.GL11.glClear; import static org.lwjgl.opengl.GL11.glClearColor; import static org.lwjgl.opengl.GL11.glEnable; import static org.lwjgl.opengl.GL11.glShadeModel; import org.lwjgl.LWJGLException; import org.lwjgl.opengl.Display; import org.lwjgl.opengl.DisplayMode; import org.lwjgl.opengl.GLContext; public class Main { static int width = 800, height = 600; static DisplayMode mainDisplayMode = new DisplayMode(width, height); static boolean running = true; static void update() { if (Display.wasResized()) { width = Display.getWidth(); height = Display.getHeight(); } Display.update(); Display.sync(60); if (Display.isCloseRequested()) { running = false; } } public static void main(String[] args) { try { Display.setLocation((Display.getDesktopDisplayMode().getWidth() - mainDisplayMode.getWidth()) / 2, (Display.getDesktopDisplayMode().getHeight() - mainDisplayMode.getHeight()) / 2); Display.setResizable(true); Display.setVSyncEnabled(true); Display.setDisplayMode(mainDisplayMode); Display.create(); } catch (LWJGLException ex) { System.err.println(ex.getStackTrace().toString()); Display.destroy(); System.exit(1); } if (!GLContext.getCapabilities().OpenGL33) { System.err.println(" OpenGL 3.3."); System.exit(0); } glShadeModel(GL_SMOOTH); glEnable(GL_TEXTURE_2D); glEnable(GL_DEPTH_TEST); glClearColor(1f, 0f, 0f, 1f); while (running) { glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); update(); } Display.destroy(); System.exit(0); } }
Isso conclui o primeiro artigo sobre como escrever um jogo no LWJGL. Se a pesquisa contiver mais de 50% de respostas positivas, continuarei escrevendo uma série de artigos.