如何在html上处理Libgdx中的resize(GwtApplication)

Ale*_*tin 6 java gwt libgdx

在html上libgdx的问题.我两天都解决不了这个问题.当我调整浏览器的大小时,我的应用程序中Gdx.graphics不会改变.我查看了源代码GwtApplication,这对我来说非常困难,而且我理解Gdx.graphics必须自动更改,但事实并非如此.对不起,我的英语不好.

Cha*_*ase 7

首先看看如何调整用户输入的大小.在您的共享项目代码中,您可以:

    if(Gdx.app.getType() == ApplicationType.WebGL) {
        InputAdapter webGlfullscreen = new InputAdapter() {
            @Override
            public boolean keyUp (int keycode) {
                if (keycode == Keys.ENTER) {
                    if (!Gdx.graphics.isFullscreen()) Gdx.graphics.setDisplayMode(Gdx.graphics.getDisplayModes()[0]);
                } else if(keycode == Keys.UP || keycode == Keys.W) {
                    Gdx.graphics.setDisplayMode(Gdx.graphics.getWidth()+100, Gdx.graphics.getHeight()+100, false);
                } else if(keycode == Keys.DOWN  || keycode == Keys.S) {
                    Gdx.graphics.setDisplayMode(Gdx.graphics.getWidth()-100, Gdx.graphics.getHeight()-100, false);
                }
                return true;
            }
        };
        Gdx.input.setInputProcessor(webGlfullscreen);
    }
Run Code Online (Sandbox Code Playgroud)

如果您有方形视口,则每个维度添加100只是正确的.调整您想要的比例.

LibGDX不处理GWT窗口调整大小你必须向-html项目添加一些代码,因为LibGDX不会监听浏览器大小调整,所以你必须自己添加一些GWT代码.在你的GwtApplication子类中:

public class GwtLauncher extends GwtApplication {

    @Override
    public void onModuleLoad () {
        super.onModuleLoad();
        com.google.gwt.user.client.Window.addResizeHandler(new ResizeHandler() {
              public void onResize(ResizeEvent ev) {
                  Gdx.graphics.setDisplayMode(ev.getWidth(),ev.getHeight(), false);
              }
            });
    }

    @Override
    public GwtApplicationConfiguration getConfig () {
        int height = com.google.gwt.user.client.Window.getClientHeight();
        int width = com.google.gwt.user.client.Window.getClientWidth();
        GwtApplicationConfiguration cfg = new GwtApplicationConfiguration(width, height);
        return cfg;
    }

    @Override
    public ApplicationListener getApplicationListener () {
        return new GdxDemoGame();
    }
}
Run Code Online (Sandbox Code Playgroud)

当然,现在你必须处理纵横比问题,就像在桌面端一样.

ps我必须查看GWT后端,以确定是否已经有任何调整大小的行为.这就是我弄清楚调用setDisplayMode会调整分辨率的方式,也是我看到没有调整大小监听器的方式.您可以查看https://github.com/libgdx/libgdx/blob/master/backends/gdx-backends-gwt/src/com/badlogic/gdx/backends/gwt/GwtApplication.java