CtrlK
BlogDocsLog inGet started
Tessl Logo

tessl/maven-com-badlogicgames-gdx--gdx-backend-gwt

GWT backend for libGDX enabling Java game development for web browsers through JavaScript compilation

Pending
Overview
Eval results
Files

application.mddocs/

Application Setup

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.

Core Application Classes

GwtApplication { .api }

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);
}

GwtApplicationConfiguration { .api }

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();
}

OrientationLockType { .api }

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;
    }
}

Inner Classes and Interfaces

AgentInfo { .api }

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();
}

LoadingListener { .api }

public interface LoadingListener {
    void beforeSetup();
    void afterSetup();
}

Usage Examples

Basic Application Setup

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();
    }
}

Full-Screen Application

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();
    }
}

Application with Custom Loading

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
            }
        };
    }
}

Browser Detection and Device-Specific Logic

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

docs

application.md

audio.md

files.md

graphics.md

index.md

input.md

networking.md

preloader.md

webaudio.md

widgets.md

tile.json