我正在构建一种简单的游戏,它是一个红色方 block ,你可以用箭头键移动,我制作了一个完成对象,它会检测你何时进入它。现在,我做到了,如果“播放器”与“完成对象”相交,它将播放声音,但它会在每个滴答声中播放声音。我尝试了 Thread.sleep() 和 wait(),但这让我的整个游戏都 hibernate 了,而不仅仅是声音延迟。我的播放声音方法:
public void playSound( String filename ) throws IOException{
InputStream in = new FileInputStream(filename);
AudioStream as = new AudioStream(in);
AudioPlayer.player.start(as);
}
和我的球员完成相交:
//PLAYER1 LEVEL FINISHING
if( player.getBounds().intersects(levelfinish.getBounds())){
message = "A winner is you!";
try {
playSound("D:/BadGame/Sounds/winner.wav");
} catch(Exception ex){
ex.printStackTrace();
}
}
message 只是显示在屏幕中间的字符串,它一切正常,但需要某种延迟,因此声音不会持续播放,而是每隔 10 秒播放一次,或者仅当您与它,一次。你们能给我任何关于如何做到这一点的线索吗?谢谢!
最佳答案
声音继续播放的原因是每个滴答声条件仍然成立。声音结束后交集仍然有效,因此声音会再次播放。
防止重复的一个非常简单的方法是使用一个变量来跟踪您是否播放过声音。像这样的东西,尽管未经测试:
将此部分放在不会每次更新都改变的地方:
boolean soundPlayed = false;
在您的函数中使用此部分
//PLAYER1 LEVEL FINISHING
if( player.getBounds().intersects(levelfinish.getBounds())){
message = "A winner is you!";
if (soundPlayed == false) {
try {
playSound("D:/BadGame/Sounds/winner.wav");
soundPlayed = true;
} catch(Exception ex){
ex.printStackTrace();
}
}
}
关于java - 声音播放之间有延迟吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5625430/