8000 UiContainer · mini2Dx/mini2Dx Wiki · GitHub
[go: up one dir, main page]

Skip to content
Augusto Zanellato edited this page Jun 5, 2019 · 6 revisions

Requires mini2Dx 1.3.0 or above

Before you can create UI elements, you need a UiContainer to add them to. The UiContainer is responsible for laying out the UI and sending input through the element tree. The UiContainer requires an AssetManager for loading required themes and resources. If you want to use the default theme provided by mini2Dx-ui, you'll need to provide a FallbackFileHandleResolver to the AssetManager.

First let's set up a basic game that initialises and runs a UiContainer.

public class UiContainerExample extends BasicGame {
    private AssetManager assetManager;
    private UiContainer uiContainer;

    @Override
    public void initialise() {
        //Create fallback file resolver so we can use the default mini2Dx-ui theme
        FileHandleResolver fileHandleResolver = new FallbackFileHandleResolver(new ClasspathFileHandleResolver(), new InternalFileHandleResolver());

        //Create asset manager for loading resources
        assetManager = new AssetManager(fileHandleResolver);

        //Add mini2Dx-ui theme loader
        assetManager.setLoader(UiTheme.class, new UiThemeLoader(fileHandleResolver));

        //Load default theme
        assetManager.load(UiTheme.DEFAULT_THEME_FILENAME, UiTheme.class);

        uiContainer = new UiContainer(this, assetManager);
    }

    @Override
    public void update(float delta) {
        if(!assetManager.update()) {
                //Wait for asset manager to finish loading assets
                return;
        }
        if(!UiContainer.isThemeApplied()) {
                UiContainer.setTheme(assetManager.get(UiTheme.DEFAULT_THEME_FILENAME, UiTheme.class));
        }
        uiContainer.update(delta);
    }

    @Override
    public void interpolate(float alpha) {
        uiContainer.interpolate(alpha);
    }

    @Override
    public void render(Graphics g) {
        uiContainer.render(g);
    }
}

Sending keyboard/mouse/touch input to the UiContainer

The UiContainer implements the InputProcessor interface from LibGDX. This means if you want the UiContainer to receive input you can either set it as the main InputProcessor or add it to an InputMultiplexer. The UiContainer will return true on methods (blocking subsequent processors receiving input) if a UI element handles the input.

Gdx.input.setInputProcessor(uiContainer);

//or

InputMultiplexer inputMultiplexer = new InputMultiplexer();
inputMultiplexer.addProcessor(uiContainer);
...
Gdx.input.setInputProcessor(inputMultiplexer);

Sending controller input to the UiContainer

The framework provides several input handling implementations for different controllers. All controller input handling classes implement ControllerUiInput. The following example shows how to connect an Xbox 360 controller to the UiContainer.

//See Input Handling wiki page for initialising the controller
Xbox360Controller controller = ...

Xbox360UiInput xbox360UiInput = new Xbox360UiInput(uiContainer);
controller.addListener(xbox360UiInput);

Clone this wiki locally

0