Sigueme en Facebook Sigueme en Twitter Sigueme en Instagram Sigueme en Youtube
JC Mouse Bolivia
Index / Noticias / Lightweight Java Game Library

Lightweight Java Game Library

Autor jc mouse lunes, junio 4, 2018

¿Quien no ha querido programar un juego? creo que la mayoría si no es que todos los que conocen de programación sin importar el lenguaje de su elección han dado sus pasos en el mundo del desarrollo de juegos de computadora, algunos con éxito otros más no pasaron del clásico “Tetris” o “Mario Bros”. Y es que esto del desarrollo de video juegos, no es un juego 🙂 y más si tu meta es comercializarlo y vivir de ello, existen varios factores que se deben tomar en cuenta, uno de ellos es el lenguaje de programación.

Java nunca la tuvo fácil a la hora de trabajar con gráficos, animaciones y tan estrechamente con el sistema operativo como otros lenguajes como C, sin embargo eso no quiere decir que Java no sirva para el desarrollo de juegos y prueba de ello es el conocido juego Minecraf programador en java.

De entre los Engines, APIs, o librerías que podemos encontrar en la red para el desarrollo de video juegos en lenguaje java, podemos mencionar en primer lugar a la biblioteca, Lightweight Java Game Library (LWJGL o Biblioteca Java Ligera para Juegos). Solución dirigida a programadores tanto amateurs como profesionales y destinada a la creación de juegos de calidad comercial ya que proporciona acceso a diversas bibliotecas multiplataforma, como OpenGL (Open Graphics Library) y OpenAL (Open Audio Library), permitiendo la creación de juegos de alta calidad con gráficos y sonido 3D.

La ultima versión estable de LWJGL es la 3.1.6 (4 de febrero de 2018) multiplataforma y disponible bajo licencia BSD y por lo tanto es de libre distribución.

LWJGL esta compuesto por varios módulos los cuales pueden ser usados individualmente o por separado, podemos mencionar por ejemplo módulos como:

  • OpenAL API de audio tridimensional.
  • NanoVG.  Biblioteca de renderizado de gráficos vectoriales 2D usando OpenGL.
  •  bgfx. Biblioteca de renderizado multiplataforma que admite múltiples backends gráficos.
  •  par shapes. Generador para formas paramétricas y otras formas simples.

Descarga 

LWJGL se encuentra disponible para descarga en “https://www.lwjgl.org/download” peso 55MB

Instalación

Se instala como cualquier otra librería dependiendo el IDE en el que trabajes (Netbeans, Eclipse, IntelliJ IDEA), para mayor información, puedes encontrar un manual (en ingles) en https://github.com/LWJGL/lwjgl3-wiki/wiki/1.2.-Install

Ejemplo de uso

import org.lwjgl.*;
import org.lwjgl.glfw.*;
import org.lwjgl.opengl.*;
import org.lwjgl.system.*;

import java.nio.*;

import static org.lwjgl.glfw.Callbacks.*;
import static org.lwjgl.glfw.GLFW.*;
import static org.lwjgl.opengl.GL11.*;
import static org.lwjgl.system.MemoryStack.*;
import static org.lwjgl.system.MemoryUtil.*;

/**
 * @see https://www.lwjgl.org/guide 
 */
public class HelloWorld {

    // The window handle
    private long window;

    public void run() {
        System.out.println("Hola LWJGL " + Version.getVersion() + "!");

        init();
        loop();

        // Free the window callbacks and destroy the window
        glfwFreeCallbacks(window);
        glfwDestroyWindow(window);

        // Terminate GLFW and free the error callback
        glfwTerminate();
        glfwSetErrorCallback(null).free();
    }

    private void init() {
        // Setup an error callback. The default implementation
        // will print the error message in System.err.
        GLFWErrorCallback.createPrint(System.err).set();

        // Initialize GLFW. Most GLFW functions will not work before doing this.
        if (!glfwInit()) {
            throw new IllegalStateException("Unable to initialize GLFW");
        }

        // Configure GLFW
        glfwDefaultWindowHints(); // optional, the current window hints are already the default
        glfwWindowHint(GLFW_VISIBLE, GLFW_FALSE); // the window will stay hidden after creation
        glfwWindowHint(GLFW_RESIZABLE, GLFW_TRUE); // the window will be resizable

        // Create the window
        window = glfwCreateWindow(280, 200, "Hola Mundo Cruel!", NULL, NULL);
        if (window == NULL) {
            throw new RuntimeException("Failed to create the GLFW window");
        }

        // Setup a key callback. It will be called every time a key is pressed, repeated or released.
        glfwSetKeyCallback(window, (window, key, scancode, action, mods) -> {
            if (key == GLFW_KEY_ESCAPE && action == GLFW_RELEASE) {
                glfwSetWindowShouldClose(window, true); // We will detect this in the rendering loop
            }
        });

        // Get the thread stack and push a new frame
        try (MemoryStack stack = stackPush()) {
            IntBuffer pWidth = stack.mallocInt(1); // int*
            IntBuffer pHeight = stack.mallocInt(1); // int*

            // Get the window size passed to glfwCreateWindow
            glfwGetWindowSize(window, pWidth, pHeight);

            // Get the resolution of the primary monitor
            GLFWVidMode vidmode = glfwGetVideoMode(glfwGetPrimaryMonitor());

            // Center the window
            glfwSetWindowPos(
                    window,
                    (vidmode.width() - pWidth.get(0)) / 2,
                    (vidmode.height() - pHeight.get(0)) / 2
            );
        } // the stack frame is popped automatically

        // Make the OpenGL context current
        glfwMakeContextCurrent(window);
        // Enable v-sync
        glfwSwapInterval(1);
        // Make the window visible
        glfwShowWindow(window);
    }

    private void loop() {
        // This line is critical for LWJGL's interoperation with GLFW's
        // OpenGL context, or any context that is managed externally.
        // LWJGL detects the context that is current in the current thread,
        // creates the GLCapabilities instance and makes the OpenGL
        // bindings available for use.
        GL.createCapabilities();

        // Set the clear color
        glClearColor(0.0f, 1.0f, 0.0f, 0.0f);

        // Run the rendering loop until the user has attempted to close
        // the window or has pressed the ESCAPE key.
        while (!glfwWindowShouldClose(window)) {
            glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); // clear the framebuffer
            
            glfwSwapBuffers(window); // swap the color buffers
            // Poll for window events. The key callback above will only be invoked during this call.
            glfwPollEvents();
        }
    }

    public static void main(String[] args) {
        new HelloWorld().run();
    }

}

biblioteca de juegos

LWJGL también es usado por varios motores de juegos y librerías como Slick2D, LibGDX, JMonkeyEngine, Xith3D,   Nifty Gui, etc.

juegos en java

enjoy!!!

Tags

Si te ha gustado podrías compartirlo o dejar un comentario. ¡Muchas gracias!
Autor: JC Mouse

Yo soy yo :) JC Mouse, Soy orgullosamente boliviano soy fundador y CEO de la web jc-Mouse.net uno de las pocas web en emprendimiento y tecnología en Bolivia.

Toda la información que encuentres en este sitio es y sera completamente gratis siempre, puedes copiar, descargar y re-publicar si así lo deseas en otros blogs o sitios web, solo te pido a cambio que dejes una referencia a esta web. Esto nos ayuda a crecer y seguir aportando. Bye

Enjoy! :)

También Te Podría Interesar

Ecuación de segundo grado

Ecuación de segundo grado

Problema: Implemente el código necesario en Kotlin para resolver una ecuación de segundo grado de números reales: Soluci...

Codigo de Control en Visual Basic | Impuestos Bolivia

Codigo de Control en Visual Basic | Impuestos Bolivia

En esta oportunidad dejamos las fuentes del Generador de Código de Control de Impuestos Bolivia (Facturación Virtual), e...

GSON: Generar objetos java desde JSON

GSON: Generar objetos java desde JSON

En un post anterior vimos como utilizar GSON para serializar un objeto java en JSON, en esta oportunidad se vera el proc...

Formateo de registros en Excel con JExcel

Formateo de registros en Excel con JExcel

Tenia un problema, me pasaron unos archivos excel con unos cientos de registros (ver imagen más abajo) que exportaron de...

Leer Código QR desde un archivo de imagen

Leer Código QR desde un archivo de imagen

Los códigos QR del inglés Quick Response Code o código de respuesta rápida es un tipo de código para el almacenamiento d...

TextInput – Material Design

TextInput – Material Design

TextInput es una caja de texto que implementa el estilo de Material Design popular en dispositivos móviles, pero este sw...

Comparte lo que sabes

Categorias

Últimas entradas

Sans Forgetica es una fuente diseñada utilizando los principios de la psicología cognitiva para ayudar a recordar mejor...

Facebook la compañía de Mark Zuckerberg confirmó hace unas semanas que la Red Social había sido hackeado debido a una br...

Google+ o Google plus como también se le conoce a la red social del gigante de la informática Google cerrará para siempr...

Como dice un viejo dicho, “La practica hace al maestro” y en el mundo de la programación no es diferente, po...

Android Bolivia

MAUS