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

Obtener Metadatos de un ResultSet

Obtener Metadatos de un ResultSet

En este post mostramos un ejemplo de uso de la interface ResultSetMetaData el cual se extiende Wrapper que es una interf...

Subir imagen a un servidor web con REST/JSON

Subir imagen a un servidor web con REST/JSON

En este tutorial crearemos una sencilla aplicación para android que nos permitirá subir una imagen a un servidor web. La...

Convierte tus dibujos web en Código HTML

Convierte tus dibujos web en Código HTML

Sketch2Code es un proyecto de Microsoft el cual usa IA (Inteligencia Artificial) para transformar el diseño de una inter...

Depuración avanzada en PHP

Depuración avanzada en PHP

Xdebug es una extensión para PHP que nos ayuda con la depuración y el desarrollo de aplicaciones. Contiene un depurador...

Instalador java con WinRar

Instalador java con WinRar

En este videoTutorial veremos la forma mas sencilla de crear un instalador para programas hechos en Java utilizando el p...

Impresión de imágenes en PDF

Impresión de imágenes en PDF

Existen varias aplicaciones (free y de pago) que emulan una impresora virtual para generar archivos en PDF  (Portable Do...

Comparte lo que sabes

Categorias

Últimas entradas

En este post, aprenderemos como conectar Visual Basic 6 con SQL Server, abrir una tabla, leer su contenido y mostrar est...

Lo que veremos en este post es la configuración del driver para PHP de SQL Server que ha creado Microsoft el cual permit...

Google Bard la inteligencia artificial de Google se actualiza con una mejora que entra a competir con el resto de IAs y...

El error: Instalaba SQL Server 2008 R2 en español en Windows con el idioma «Español (Bolivia)»y de repente me salio este...

Herramientas

Generador de Enlaces a Whatsapp