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

Timer Libgdx。在计时器内调用screen dispose()方法,timer,libgdx,screen,dispose,Timer,Libgdx,Screen,Dispose,我试图让我的游戏一个接一个地播放两段不同的音乐。我使用两个单独的剪辑,因为它们中的每一个都与不同的动画相关联。为了让第二个音乐剪辑等待第一个音乐剪辑完成,我使用了Timer.schedule(Task aTask,float delay)。这似乎很有效。但是,在第二个音乐剪辑完成后,我需要更改屏幕并处理当前屏幕,因此我再次使用Timer.schedule(任务aTask,float delay),以便在第二个音乐剪辑完成后进行更改。但是,我在将dispose()放置在Timer.Task中时遇到

我试图让我的游戏一个接一个地播放两段不同的音乐。我使用两个单独的剪辑,因为它们中的每一个都与不同的动画相关联。为了让第二个音乐剪辑等待第一个音乐剪辑完成,我使用了Timer.schedule(Task aTask,float delay)。这似乎很有效。但是,在第二个音乐剪辑完成后,我需要更改屏幕并处理当前屏幕,因此我再次使用Timer.schedule(任务aTask,float delay),以便在第二个音乐剪辑完成后进行更改。但是,我在将dispose()放置在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()方法等待,而不是使用计时器(并在需要播放音频时保持线程活动)? 谢谢
ccm

您可以使用OnCompleteListener执行以下操作:

music.setOnCompletionListener(new OnCompletionListener() {

     @Override
     public void onCompletion(Music music) {

     }
});
这样,您可以等到第一首曲目完成后,播放第二首曲目并将其丢弃…:)


希望对您有所帮助。

错误提示:“或已处理”。也许您可以在
屏幕内调用
dispose()
。hide()
方法?如果是这种情况,请调用
dispose
两次。只需删除
TimerTask
中的
dispose
,并在
hide()
方法中调用
dispose()
。也可以使用OnCompleteListener,就像建议的那样。这解决了我的问题。一切都进行得很顺利,在正确的时间进行处理。谢谢