GWT backend for libGDX enabling Java game development for web browsers through JavaScript compilation
—
The libGDX GWT backend provides core application initialization and lifecycle management for web deployment. The main entry point is GwtApplication, which must be extended to create a web-deployable libGDX application.
public abstract class GwtApplication implements EntryPoint, Application {
// Abstract methods that must be implemented
public abstract GwtApplicationConfiguration getConfig();
public abstract ApplicationListener createApplicationListener();
// Lifecycle methods
public void onModuleLoad();
// Core subsystem access
public Graphics getGraphics();
public Audio getAudio();
public Input getInput();
public Files getFiles();
public Net getNet();
// Logging
public void log(String tag, String message);
public void error(String tag, String message);
public void debug(String tag, String message);
public void setLogLevel(int logLevel);
public int getLogLevel();
// Preferences and storage
public Preferences getPreferences(String name);
public Clipboard getClipboard();
// Application control
public void postRunnable(Runnable runnable);
public void exit();
public ApplicationType getType(); // Returns ApplicationType.WebGL
public int getVersion();
// Memory information
public long getJavaHeap();
public long getNativeHeap();
public native double usedJSHeapSize();
// Browser detection
public static boolean isMobileDevice();
public static AgentInfo agentInfo();
// Canvas and preloader access
public String getBaseUrl();
public Preloader getPreloader();
public CanvasElement getCanvasElement();
// Loading and lifecycle listeners
public LoadingListener getLoadingListener();
public void setLoadingListener(LoadingListener loadingListener);
public void addLifecycleListener(LifecycleListener listener);
public void removeLifecycleListener(LifecycleListener listener);
}public class GwtApplicationConfiguration {
// Canvas dimensions
public final int width;
public final int height;
public final boolean usePhysicalPixels;
// Layout and spacing
public int padHorizontal = 10;
public int padVertical = 10;
// Audio configuration
public boolean disableAudio;
// Graphics settings
public boolean antialiasing = false;
public boolean stencil = false;
public boolean alpha = false;
public boolean premultipliedAlpha = false;
public boolean preserveDrawingBuffer = false;
public boolean useDebugGL = false;
public boolean useGL30 = false;
public boolean xrCompatible = false;
// Display settings
public OrientationLockType fullscreenOrientation;
public String canvasId;
public Panel rootPanel;
public TextArea log;
// Input settings
public boolean useAccelerometer = true;
public boolean useGyroscope = false;
// Browser settings
public boolean openURLInNewWindow = true;
public boolean fetchAvailableOutputDevices = false;
// Constructors
public GwtApplicationConfiguration();
public GwtApplicationConfiguration(boolean usePhysicalPixels);
public GwtApplicationConfiguration(int width, int height);
public GwtApplicationConfiguration(int width, int height, boolean usePhysicalPixels);
// Methods
public boolean isFixedSizeApplication();
}public enum OrientationLockType {
LANDSCAPE("landscape"),
PORTRAIT("portrait"),
PORTRAIT_PRIMARY("portrait-primary"),
PORTRAIT_SECONDARY("portrait-secondary"),
LANDSCAPE_PRIMARY("landscape-primary"),
LANDSCAPE_SECONDARY("landscape-secondary");
private final String name;
private OrientationLockType(String name) {
this.name = name;
}
public String getName() {
return name;
}
}public static class AgentInfo extends JavaScriptObject {
public final native boolean isFirefox();
public final native boolean isChrome();
public final native boolean isSafari();
public final native boolean isOpera();
public final native boolean isIE();
public final native String getUserAgent();
}public interface LoadingListener {
void beforeSetup();
void afterSetup();
}public class MyGameGwt extends GwtApplication {
@Override
public GwtApplicationConfiguration getConfig() {
GwtApplicationConfiguration config = new GwtApplicationConfiguration(1024, 768);
config.antialiasing = true;
config.stencil = true;
return config;
}
@Override
public ApplicationListener createApplicationListener() {
return new MyGame();
}
}public class FullScreenGameGwt extends GwtApplication {
@Override
public GwtApplicationConfiguration getConfig() {
GwtApplicationConfiguration config = new GwtApplicationConfiguration(0, 0); // Use available space
config.fullscreenOrientation = OrientationLockType.LANDSCAPE;
config.antialiasing = true;
return config;
}
@Override
public ApplicationListener createApplicationListener() {
return new MyGame();
}
}public class CustomLoadingGameGwt extends GwtApplication {
@Override
public GwtApplicationConfiguration getConfig() {
return new GwtApplicationConfiguration(800, 600);
}
@Override
public ApplicationListener createApplicationListener() {
return new MyGame();
}
@Override
public Preloader createPreloader() {
return new Preloader("assets.txt");
}
@Override
public LoadingListener getLoadingListener() {
return new LoadingListener() {
@Override
public void beforeSetup() {
// Custom pre-loading setup
}
@Override
public void afterSetup() {
// Custom post-loading setup
}
};
}
}public class AdaptiveGameGwt extends GwtApplication {
@Override
public GwtApplicationConfiguration getConfig() {
GwtApplicationConfiguration config;
if (GwtApplication.isMobileDevice()) {
config = new GwtApplicationConfiguration(0, 0); // Full screen on mobile
config.fullscreenOrientation = OrientationLockType.LANDSCAPE;
} else {
config = new GwtApplicationConfiguration(1024, 768);
}
AgentInfo info = GwtApplication.agentInfo();
if (info.isIE()) {
config.antialiasing = false; // Disable for IE compatibility
}
return config;
}
@Override
public ApplicationListener createApplicationListener() {
return new MyGame();
}
}Install with Tessl CLI
npx tessl i tessl/maven-com-badlogicgames-gdx--gdx-backend-gwt