Исключение LibGDX GwtApplication (TypeError) в развертывании HTML - PullRequest
0 голосов
/ 13 июня 2018

Я пытаюсь развернуть мою игру libgdx в HTML.В десктопе и Android это работает хорошо.Когда я делаю ./gradlew html:dist, он прекрасно компилируется, и у меня есть папка dist, которая создается в папке html.Мне удалось запустить игру в браузере: enter image description here

Однако, когда я нажимаю любую кнопку, которая изменит экран, игра вылетает: enter image description here

Ошибка:

GwtApplication: исключение: (TypeError): ag [ab] не определено (TypeError): ag [ab] не определено

и в консоли у меня есть:

Ошибка: java.lang.RuntimeException: com.google.gwt.core.client.JavaScriptException: (TypeError): ag [ab] isundefined

Два вопроса ( 1 , 2 ) имеют ту же проблему, но ни один из них не решен.

----- Вот как я могу изменить экран ----

Когда пользователь нажимает на 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);
  }
}

----- РЕДАКТИРОВАТЬ -----

Я добавил стиль= 'PRETTY' опция, как предложено моему компилятору gwt, и теперь у меня есть эта ошибка:

Ошибка: java.lang.RuntimeException: com.google.gwt.core.client.JavaScriptException: (TypeError): этот $ static.uniforms [this $ static.currProgram] не определен

1 Ответ

0 голосов
/ 14 июня 2018

По какой-то причине в 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));
                }
        })));
    }
});
...