【问题标题】:libgdx throws error on spritebatch creationlibgdx 在创建 spritebatch 时抛出错误
【发布时间】:2021-06-12 18:20:32
【问题描述】:

如果我像这样更改屏幕,它会起作用。

        button.addListener(new ClickListener() {
           @Override
           public void clicked(InputEvent event, float x, float y) {
               someclass.setScreen(someclass.getGameScreen());
           }
        });

但我的目标是使用服务器响应来更改屏幕,如下所示:

Main.java

        button.addListener(new ClickListener() {
           @Override
           public void clicked(InputEvent event, float x, float y) {
               client.sendTCP(new ChangeLobbyToGameRequest());
           }
        });

和

    public void changeToGame(){
        someclass.setScreen(someclass.getGameScreen());
    }

服务器监听器

if (object instanceof ChangeLobbyToGameResponse){
        Main.changeToGame();
 }

然后我收到以下错误

E/AndroidRuntime: FATAL EXCEPTION: Thread-4
Process: com.somegame.game, PID: 15828
java.lang.IllegalArgumentException: Error compiling shader: 
    at com.badlogic.gdx.graphics.g2d.SpriteBatch.createDefaultShader(SpriteBatch.java:164)
    at com.badlogic.gdx.graphics.g2d.SpriteBatch.<init>(SpriteBatch.java:127)
    at com.badlogic.gdx.graphics.g2d.SpriteBatch.<init>(SpriteBatch.java:81)
    at com.labyrix.game.Screens.GameScreen.show(GameScreen.java:46)
    at com.badlogic.gdx.Game.setScreen(Game.java:61)
    at com.labyrix.game.Screens.Lobbyscreen.changeToGame(LobbyScreen.java:59)

游戏画面展示方式

@Override
public void show() {
    batch = new SpriteBatch();
    isorend = new Board(batch);
    ..... 
}

【问题讨论】:

    标签: java android libgdx kryonet


    【解决方案1】:

    OpenGL 操作必须在主线程上执行。在按钮的情况下,clickListener 在 UI 线程(或称为主线程)上调用非常好。但是,在服务器响应的情况下,它是一个不同的线程。所以需要将服务端回调转置到主线程

    public void changeToGame(){
            Gdx.app.postRunnable (new Runnable() {
               someclass.setScreen(someclass.getGameScreen());
            });
    }
    

    postRunnable 在满足 openGL 要求的主线程上排队。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-08-03
      • 2017-10-19
      • 1970-01-01
      • 1970-01-01
      • 2013-01-19
      • 1970-01-01
      • 2022-12-18
      • 1970-01-01
      相关资源
      最近更新 更多