【问题标题】:LibGDX GwtApplication Exception (TypeError) in HTML DeploymentHTML 部署中的 LibGDX GwtApplication 异常 (TypeError)
【发布时间】:2018-11-22 21:47:14
【问题描述】:

我尝试在 HTML 中部署我的 libgdx 游戏。在桌面和 Android 上运行良好。当我执行./gradlew html:dist 时,它编译得很好,并且我有一个在 html 文件夹中创建的 dist 文件夹。我成功在浏览器上启动了游戏:

但是,当我单击任何会改变屏幕的按钮时,游戏会崩溃:

错误是:

GwtApplication: 异常: (TypeError) : a.g[a.b] 未定义 (TypeError) : a.g[a.b] 未定义

在控制台中,我有:

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

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

----- 这是我改变屏幕的方法 ----

例如,当用户点击 Stats 时,我的代码会这样做:

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

这是我的屏幕管理器:

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:

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.uniforms[this$static.currProgram] 未定义

【问题讨论】:

  • 请不要重复发布相同的问题stackoverflow.com/questions/50817992/…
  • 你读过这个问题和另一个问题吗???这绝对是另一个问题。请在投反对票和评论类似内容之前,花 2 分钟阅读并尝试理解问题的含义
  • 我们需要更多信息来提供帮助 - 您可以使用 style=PRETTY 编译您的应用程序吗?我不确定你的 gradle 是如何设置的,但是在调用 GWT 编译器时,这应该是一个选项。或者,启用源映射,或对堆栈跟踪进行去混淆处理,但我认为 PRETTY 更容易与您的代码匹配。请注意,“TypeError”只是 JS 说“我不明白”的无用方式,因此链接的问题确实不相关(尤其是 nullMethod 一个 - a.g[a.b] 绝对不是 nullMethod) .
  • @ColinAlworth 感谢您的回答。我用新的错误更新了我的问题,但我仍然不明白出了什么问题.. Error: java.lang.RuntimeException: com.google.gwt.core.client.JavaScriptException: (TypeError) : this$static.uniforms[this$static.currProgram] is undefined
  • 在您的代码中的某处,您有 uniforms[currProgram].someMethodOrField 或类似的东西 - 在 PRETTY JS 和 Java 中获取该代码的其余上下文将有助于调试它。由于它为空,因此顶部的 someMethodOrField 在 JS 中因 TypeError 而中断。您可以将浏览器的开发工具配置为在出现异常时暂停,以便查看堆栈跟踪以及当时的变量/字段的值。

标签: java html gwt libgdx


【解决方案1】:

由于某种原因,在 HTML 中你不能在新的 Runnable 中使用静态方法。所以当你想换屏时,需要去掉淡出:

button_stats.addListener(new ClickListener(){
    @Override
    public void clicked(InputEvent event, float x, float y){
         ScreenManager.getInstance().showScreen(ScreenEnum.STATS);
    }
});

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-10-07
    • 2014-12-22
    • 2014-04-20
    • 1970-01-01
    • 2014-11-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多