首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >HTML部署中的LibGDX GwtApplication Exception (TypeError)

HTML部署中的LibGDX GwtApplication Exception (TypeError)
EN

Stack Overflow用户
提问于 2018-06-13 18:36:36
回答 1查看 304关注 0票数 2

我尝试在HTML中部署我的libgdx游戏。在台式机和安卓系统中,它运行得很好。当我做./gradlew html:dist时,它编译得很好,并且我有一个dist文件夹,它是在html文件夹中创建的。我成功地在浏览器上启动了游戏:

然而,当我点击任何改变屏幕的按钮时,游戏崩溃了:

错误是:

GwtApplication: exception:(TypeError):a.ga.b未定义(TypeError):a.ga.b未定义

在控制台中,我有:

错误:未定义java.lang.RuntimeException: com.google.gwt.core.client.JavaScriptException:(TypeError):a.ga.b

有两个问题(12)有相同的问题,但都没有解决我的问题。

-这里是如何更改屏幕

当用户单击Stats作为示例时,我的代码将执行此操作:

代码语言:javascript
复制
button_stats.addListener(new ClickListener(){
        @Override
        public void clicked(InputEvent event, float x, float y){

            stage.addAction(Actions.sequence(Actions.fadeOut(0.2f), Actions.run(new Runnable(){
                @Override
                public void run() {
                    ScreenManager.getInstance().showScreen(ScreenEnum.STATS);
                    }
            })));
        }
    });

下面是我的屏幕管理器:

代码语言:javascript
复制
public class ScreenManager {

    // Singleton: unique instance
    private static ScreenManager instance;

    // Reference to game
    private SpeedRun2Game game;

    // Singleton: private constructor
    private ScreenManager() {
        super();
    }

    // Singleton: retrieve instance
    public static ScreenManager getInstance() {
        if (instance == null) {
            instance = new ScreenManager();
        }
        return instance;
    }

    // Initialization with the game class
    public void initialize(SpeedRun2Game game) {
        this.game = game;
    }

    // Show in the game the screen which enum type is received
    public void showScreen(com.gangscred.speedrun2.screens.ScreenEnum screenEnum, Object... params) {

        // Get current screen to dispose it
        Screen currentScreen = game.getScreen();

        // Show new screen
        Screen newScreen = screenEnum.getScreen(game , params);
        game.setScreen(newScreen);

        // Dispose previous screen
        if (currentScreen != null) {
            currentScreen.dispose();
        }
    }
}

最后是我的screenEnum:

代码语言:javascript
复制
public enum ScreenEnum {
STATS{
  public Screen getScreen(SpeedRun2Game game, Object... params){
      return new StatsScreen(game);
  }
}

-编辑

我按照gwt编译器的建议添加了style = 'PRETTY‘选项,现在我得到了这个错误:

错误: java.lang.RuntimeException: com.google.gwt.core.client.JavaScriptException:(TypeError):this$static.uniformsthis$static.currProgram是未定义的

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-06-14 06:42:24

由于某些原因,在HTML中,你不能在新的Runnable中使用静态方法。因此,当您想要更改屏幕时,您需要删除淡出:

代码语言:javascript
复制
button_stats.addListener(new ClickListener(){
    @Override
    public void clicked(InputEvent event, float x, float y){
         ScreenManager.getInstance().showScreen(ScreenEnum.STATS);
    }
});

或者,您可以保留淡出,但删除静态功能并直接更改屏幕:

代码语言:javascript
复制
SpeedRun2Game game;
...
button_stats.addListener(new ClickListener(){
    @Override
    public void clicked(InputEvent event, float x, float y){

        stage.addAction(Actions.sequence(Actions.fadeOut(0.2f), Actions.run(new Runnable(){
            @Override
            public void run() {
                game.setScreen(new StatsScreen(game));
                }
        })));
    }
});
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50835064

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档