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

Convertir imágenes JPG a PDF

Convertir imágenes JPG a PDF

En este post vemos un ejemplo de como convertir un archivo de imagen JPG en un archivo PDF utilizando para ellos la libr...

MAUS :- Simulador y Editor de exámenes para dispositivos móviles

MAUS :- Simulador y Editor de exámenes para dispositivos móviles

MAUS es una aplicación para dispositivos móviles con el Sistema Operativo Android que te permite realizar exámenes desde...

Crear imagen dinamicamente y agregar a un objeto swing

Crear imagen dinamicamente y agregar a un objeto swing

Si bien se puede hacer uso de archivos de imagen (jpg, png, bmp, etc) en las aplicaciones java, también este te permite...

Envío de correo con JavaMail/Netbeans

Envío de correo con JavaMail/Netbeans

JavaMail es una expansión de Java que facilita el envío y recepción de e-mail desde código java. JavaMail implementa el...

Validar documentos XML con esquema XSD

Validar documentos XML con esquema XSD

Un esquema XSD se utiliza para describir y validar la estructura y contenido de los datos de un documento XML. Un esquem...

Componente swing jcMousePanel v1.6.9

Componente swing jcMousePanel v1.6.9

Agregar una imagen a un jpanel o a un jframe no es complicado pero para un programador novato puede convertirse en todo...

Comparte lo que sabes

Categorias

Últimas entradas

En muchas ocasiones es necesaria la personalización de componentes java para que estos se adecuen a nuestros requerimien...

En este post mostramos como personalizar el Header (encabezado) de un componente JTable en Java colocando iconos, centra...

El JTable de Java es un gran componente para mostrar datos en una tabla de una forma rápida y sencilla, sin embargo en v...

En este post veremos un ejemplo sencillo de como descargar desde Internet archivos de cualquier tipo (*.jpg, *.png, *.gi...

Herramientas

Generador de Enlaces a Whatsapp