Libgdx。在Timer内调用screen dispose()方法

时间:2014-03-27 21:48:59

标签: timer libgdx screen dispose

我试图让我的游戏一个接一个地播放两个不同的音乐片段。我使用两个单独的剪辑,因为它们中的每一个都与不同的动画相关联。为了使第二个音乐片段等待第一个完成,我使用的是Timer.schedule(Task aTask,float delay)。这似乎工作正常。但是,在第二个音乐剪辑完成后,我需要更改屏幕并处理当前屏幕,因此我再次使用Timer.schedule(任务aTask,浮动延迟),以便在第二个音乐剪辑完成后发生更改。但是,我在将Timer()放在Timer.Task中时遇到问题,因为控制台出错了:

线程中的异常" LWJGL应用程序" java.lang.IllegalArgumentException:缓冲区未使用newUnsafeByteBuffer分配或已经处置...

我的代码如下所示:

        aMusic.play();

        Timer.schedule(new Task(){
        @Override
        public void run(){
            anotherMusic.play();
        }
        },2.0f);
        Timer.schedule(new Task(){
        @Override
        public void run(){              
            aGame.setScreen(new newScreen(aGame));
            dispose();              
        }
        },10.0f);

是否有另一种方法使dispose()方法等待使用Timer以外的其他方法(同时保持线程处于活动状态,因为音频需要播放)? 谢谢 CCM

1 个答案:

答案 0 :(得分:3)

您可以使用OnCompleteListener:

music.setOnCompletionListener(new OnCompletionListener() {

     @Override
     public void onCompletion(Music music) {

     }
});

通过这种方式,您可以等到第一首曲目完成,播放第二首曲目并将其丢弃......:)

希望它有所帮助...