我试图让我的游戏一个接一个地播放两个不同的音乐片段。我使用两个单独的剪辑,因为它们中的每一个都与不同的动画相关联。为了使第二个音乐片段等待第一个完成,我使用的是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
答案 0 :(得分:3)
您可以使用OnCompleteListener:
music.setOnCompletionListener(new OnCompletionListener() {
@Override
public void onCompletion(Music music) {
}
});
通过这种方式,您可以等到第一首曲目完成,播放第二首曲目并将其丢弃......:)
希望它有所帮助...