0

を使用してシェーダーを変更していTimerTaskます:

    public java.util.Timer ExplodeTimerTask = new Timer();
    ExplodeTimerTask.schedule(new TimerTask() {
        @Override
        public void run(){
            sprite_explosion.setRegion(textureAtlasExplosion.findRegion("spacesepxl0047"));
            exploded = true;
            game_upper_screen.TurnToSepiaForContrast();
        }
    }, 0);

    public void TurnToSepiaForContrast(){
        this.batch.setShader(shader_finish);
    }

シェーダーは 50% の確率で正しくアクティブ化されます。それ以外の場合は、次のエラーで失敗します。

exploded one: oneException in thread "Timer-0" 
java.lang.RuntimeException: No OpenGL context found in the current thread.
    at org.lwjgl.opengl.GLContext.getCapabilities(GLContext.java:124)
    at org.lwjgl.opengl.GL11.glBindTexture(GL11.java:651)
    at com.badlogic.gdx.backends.lwjgl.LwjglGL20.glBindTexture(LwjglGL20.java:67)
    at com.badlogic.gdx.graphics.GLTexture.bind(GLTexture.java:77)
    at com.badlogic.gdx.graphics.g2d.SpriteBatch.flush(SpriteBatch.java:955)
    at com.badlogic.gdx.graphics.g2d.SpriteBatch.setShader(SpriteBatch.java:1056)
    at com.cryotrax.game._ex01MyGame.TurnToSepiaForContrast(_ex01MyGame.java:474)
    at com.cryotrax.game.ex01MyGameMain$2.run(ex011MyGameMain.java:1292)
    at java.util.TimerThread.mainLoop(Unknown Source)
    at java.util.TimerThread.run(Unknown Source)

これはデスクトップでのみ表示され、モバイルでは表示されません。問題は何ですか?エラーが発生しないように、これらの呼び出しを ASYNC できる別の方法はありますか?

非同期メソッドを使用しない場合、シェーダーは常に正しく設定されますが、FPS が低下するので、それは望ましくありません。 (フレームレートに依存しない動きを使用しています。)

4

1 に答える 1