Siendo de la generación X, me encuentro sediento de entretenimiento sano y clásico como el de los 80. Aquellos juegos cuyo único objetivo era tener el puntaje más alto y ver tus iniciales en la cima del listado.
Con eso en mente, decidí comenzar a codificar un pequeño juego móvil en mi tiempo libre inspirado en clásicos como Galaga, Space Invaders y Centipede. La estructura de LibGDX junto con Android Studio siguen siendo mis herramientas preferidas para codificar en Java y OpenGL.
Version LibGDX: 1.13.1
Version Android Studio: Ladybug | 2024.2.2
Primero comienzo con una interfaz para comunicación entre módulos.
public interface CommunicationInterface {
String getBrand();
String getBuild();
boolean getSignIn();
void login();
void disconnect();
void submitScore(int score);
void getLeaderboards();
void getAchievements();
void pulseVibrate();
void exitApp();
}
Próximo, modificar el módulo de Android y Desktop (lwjgl3) para aceptar la interfaz.
public class AndroidLauncher extends AndroidApplication implements CommunicationInterface {
@Override
protected void onCreate (Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
AndroidApplicationConfiguration config = new AndroidApplicationConfiguration();
config.numSamples = 12;
View gdxGameView = initializeForView(new Main(this), config);
FrameLayout frameLayout = findViewById(R.id.game_view);
frameLayout.addView(gdxGameView);
}
@Override
public String getBrand() {
return android.os.Build.MODEL;
}
@Override
public String getBuild() {
return BuildConfig.VERSION_NAME;
}
@Override
public boolean getSignIn() {
return false;
}
@Override
public void login() {}
@Override
public void disconnect() {}
@Override
public void submitScore(int score) {}
@Override
public void getLeaderboards() {}
@Override
public void getAchievements() {}
@Override
public void pulseVibrate() {}
@Override
public void exitApp() {
finish();
}
}
public class Lwjgl3Launcher {
public static void main(String[] args) {
if (StartupHelper.startNewJvmIfRequired()) return;
createApplication();
}
private static void createApplication() {
new Lwjgl3Application(new Main(new CommunicationInterface() {
@Override
public String getBrand() {
return System.getProperty("os.name");
}
@Override
public String getBuild() {
return "PROTOTYPE";
}
@Override
public boolean getSignIn() {
return false;
}
@Override
public void login() {}
@Override
public void disconnect() {}
@Override
public void submitScore(int score) {}
@Override
public void getLeaderboards() {}
@Override
public void getAchievements() {}
@Override
public void pulseVibrate() {}
@Override
public void exitApp() {
Gdx.app.exit();
}
}),
getDefaultConfiguration());
}
private static Lwjgl3ApplicationConfiguration getDefaultConfiguration() {
Lwjgl3ApplicationConfiguration config = new Lwjgl3ApplicationConfiguration();
config.setForegroundFPS(0);
config.setTitle("THEOLIUM);
config.setWindowedMode(360, 640);
config.useVsync(true);
config.setResizable(true);
config.setBackBufferConfig(8, 8, 8, 8, 16, 0, 12);
return config;
}
}
Con eso concluye la base. Próximo, se debe modificar la clase Main del módulo principal para adoptar el marco de código Scene2d de LibGDX, que ofrece una arquitectura para crear interfaces gráficas más dinámicas y responsables. Este marco es especialmente útil para desarrollar aplicaciones de juegos, permitiendo manejar elementos visuales de manera eficiente añadiendo múltiples escenas y actores, lo que facilitará el mantenimiento y mejorará la experiencia del usuario final.


Deja una respuesta