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

Facturación electrónica: El Código de Control

Facturación electrónica: El Código de Control

¿Que es la facturación electrónica? Una factura es un documento que sirve para describir el costo de los servicios y des...

SQLite/Java conexión

SQLite/Java conexión

SQLite. SQLite es un sistema de gestión de bases de datos relacional compatible con ACID, contenida en una relativamente...

Funny Sounds: Sonidos divertidos para celular

Funny Sounds: Sonidos divertidos para celular

En este tutorial “Android Bolivia” construiremos nuestra propia aplicación para molestar a los amigos con so...

Dimask: La mascara de la Belleza (Descargar)

Dimask: La mascara de la Belleza (Descargar)

La Belleza está en la Simetría ¿Qué es lo que nos hace considerar un rostro bello? ¿Está influenciado nuestro criterio p...

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...

JSON Web Token para Java y Android

JSON Web Token para Java y Android

Un JSON Web Token es un estandar abierto para la creación de Token de Acceso el cual permite firmar digitalmente informa...

Comparte lo que sabes

Categorias

Últimas entradas

En este post conoceremos algunos de los operadores de comparación que existen en Linux y realizaremos unos ejercicios pa...

En este post conocernos lo que son las Estructuras de Control IF en los script de Bash. Estas estructuras nos ayudan a c...

Todo producto tecnológico tiene un ciclo de vida, algunos bastante corto otros muy largo, podemos mencionar el software...

Cada versión de Linux viene con su propia terminal predeterminada para interactuar con el Sistema Operativo a través de...

Android Bolivia

MAUS