Código dependiente de la plataforma

Cómo podemos integrar en nuestro juego hecho en libGDX código que depende de la plataforma, como AdMob, Swing, Google Play Services, o el SDK de Android mediante una interfaz.

Cuando desarrollamos con LiveGDX, tarde o temprano nos enfrentamos al reto de crear código que se comporte de manera diferente según la plataforma en la que se ejecute nuestro juego. Esto es fundamental porque no todas las funcionalidades o librerías están disponibles en todos los entornos. Por ejemplo, no podemos usar Swing en Android ni las APIs específicas de Android en escritorio. Por eso, necesitamos una forma de gestionar código dependiente de la plataforma sin que nuestro proyecto se vuelva un caos.

Una técnica muy efectiva para lograr esto es definir una interfaz que contenga las operaciones que queremos que varíen según la plataforma. En nuestro caso, podemos crear una interfaz llamada Plataforma que defina un método como mostrarDiálogo, que reciba un título y un mensaje para mostrar un cuadro de diálogo nativo. Así, cada plataforma implementará esta interfaz con su propia lógica para mostrar el diálogo.

Por ejemplo, en la implementación para escritorio, podemos usar JOptionPane para mostrar un cuadro de diálogo estándar de Java:

import javax.swing.JOptionPane;

public class DesktopPlataforma implements Plataforma {
    @Override
    public void mostrarDiálogo(String título, String mensaje) {
        JOptionPane.showMessageDialog(null, mensaje, título, JOptionPane.INFORMATION_MESSAGE);
    }
}

En nuestra clase principal del juego, hacemos que reciba un objeto de tipo Plataforma en su constructor y lo almacene para usarlo cuando sea necesario. Así, cuando detectemos que el usuario presiona la tecla Escape, por ejemplo, podemos llamar a plataforma.mostrarDiálogo("Salir", "No puedes salir ahora mismo"). Esto hace que el código principal sea independiente de la plataforma, delegando la responsabilidad a las implementaciones concretas.

Para que esto funcione, es importante que las implementaciones específicas estén en los proyectos correspondientes a cada plataforma. El código de escritorio va en el módulo de escritorio, y el código de Android en el módulo de Android, porque cada uno tiene acceso a sus propias librerías y APIs. En Android, por ejemplo, podemos implementar la interfaz Plataforma directamente en la actividad principal, lo que nos permite acceder fácilmente a funcionalidades propias de Android como lanzar Intents o mostrar diálogos nativos.

Esta estrategia no solo mantiene nuestro proyecto limpio y organizado, sino que también nos permite aprovechar las características específicas de cada plataforma sin romper la compatibilidad ni complicar el código multiplataforma. En la siguiente parte del tutorial se puede profundizar en ejemplos más avanzados que integren código específico para cada plataforma, pero con esta base ya tenemos una forma clara y sencilla de gestionar código dependiente del entorno en LiveGDX.

Lista de reproducción
  1. 1
    Instalación y creación de proyectos
    20 minutos
  2. 2
    Festival de la compilación
    21 minutos
  3. 3
    Dibujar por pantalla
    30 minutos
  4. 4
    Procesando entrada
    26 minutos
  5. 5
    Más tipos de imagen
    28 minutos
  6. 6
    Más tipos de entrada
    33 minutos
  7. 7
    Control de resolución
    26 minutos
  8. 8
    Scene2D
    alrededor de 1 hora
  9. 9
    Scene2D UI (parte 1)
    44 minutos
  10. 10
    Scene2D UI (parte 2)
    32 minutos
  11. 11
    Código dependiente de la plataforma
    8 minutos
  12. 12
    Ejecutar código de Android (1/2)
    11 minutos
  13. 13
    Ejecutar código en Android (2/2)
    10 minutos
  14. 14
    Usando el log
    9 minutos
  15. 15
    Internacionalización y localización (1/2)
    9 minutos
  16. 16
    Internacionalización y localización (2/2)
    10 minutos
  17. 17
    Crear juegos con gdx-liftoff y libGDX
    7 minutos