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

Gestión de productos – El modelo (Parte 4)

Gestión de productos – El modelo (Parte 4)

En la estructura del proyecto, nuestro modelo mvc esta compuesto por tres paquetes, la vista, el modelo y controlador. L...

7 herramientas online que te serán muy útiles para crear infografias

7 herramientas online que te serán muy útiles para crear infografias

La infografía es una representación visual de los propios textos; en la que intervienen descripciones, narraciones o int...

Camara de Seguridad por Internet (LiveCam)

Camara de Seguridad por Internet (LiveCam)

Existen muchas camaras de seguridad por internet algunas protegidas por contraseña pero la mayoria no, utilizando el hac...

Recolección, extracción y análisis de Metadatos

Recolección, extracción y análisis de Metadatos

La recolección de información (Information Gathering) es una de las partes más importantes en la planificación y ataques...

Métodos GET y POST en RestFul y JSON

Métodos GET y POST en RestFul y JSON

En este post veremos como enviar solicitudes GET y POST a un API RestFul  desde un dispositivo con android. Nuestra apli...

Métodos Numéricos: Sustitución Directa

Métodos Numéricos: Sustitución Directa

El Método de Sustitución Directa básicamente consiste en asumir un valor, reemplazar el mismo en la función despejada y...

Comparte lo que sabes

Categorias

Últimas entradas

Por lo general se usan transacciones a nivel base de datos y posteriormente se llaman estos a través de procedimientos a...

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

Herramientas

Generador de Enlaces a Whatsapp