【问题标题】:How to handle resize in Libgdx on html (GwtApplication)如何在 Libgdx on html (GwtApplication) 中处理调整大小
【发布时间】:2014-04-20 14:21:55
【问题描述】:

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

【问题讨论】:

    标签: java gwt libgdx


    【解决方案1】:

    首先看看如何根据用户输入调整大小。在您的共享项目代码中,您可以这样做:

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

    只有当您有一个方形视口时,向每个维度添加 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();
        }
    }
    

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

    附言我必须查看 GWT 后端以确定是否已经存在任何调整大小的行为。这就是我发现对 setDisplayMode 的调用会调整分辨率的方式,而且我看到还没有调整大小的侦听器。你可以看看自己https://github.com/libgdx/libgdx/blob/master/backends/gdx-backends-gwt/src/com/badlogic/gdx/backends/gwt/GwtApplication.java

    【讨论】:

    • 是的,我有一个错误,我认为 GwtApplication.mainLoop() 可以改变 Gdx.graphics 默认的大小,但它不是。谢谢你的回答!)明天我会改变我的代码)
    【解决方案2】:
    private WebSolve appResizeListner;
    private GwtApplicationConfiguration cfg;
    
    class ResizeListner implements ResizeHandler{
        @Override
        public void onResize(ResizeEvent event) {
            int width = event.getWidth();
            int height = event.getHeight();
            appResizeListner.resize(width, height);
            Gdx.graphics.setDisplayMode(width, height, false);
            Gdx.gl.glViewport(0, 0, width, height);
    
    
            Window.scrollTo((cfg.width - width)/2,(cfg.height - height)/2);
    
        }
    }
    
    @Override
    public GwtApplicationConfiguration getConfig () {
        int w = Window.getClientWidth();
        int h = Window.getClientHeight();
        cfg = new GwtApplicationConfiguration(w, h);
        Window.enableScrolling(false);
        Window.setMargin("0");
        Window.addResizeHandler(new ResizeListner());
        return cfg;
    }
    
    @Override
    public ApplicationListener getApplicationListener () {
        appResizeListner = new WebSolve();
        return appResizeListner;
    }
    

    -这应该是为了正确显示和调整大小而写的

    【讨论】:

      猜你喜欢
      • 2013-05-28
      • 2014-10-01
      • 2018-11-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多