我正在构建一种简单的游戏,它是一个红色方块,你可以用箭头键移动,我做了一个完成对象,它会检测到你进入它的时间。现在,我做到了这样,如果“播放器”与“完成对象”相交,它将发出声音,但它会播放声音。我尝试了Thread.sleep()和wait(),但这让我整个游戏都睡了,而不仅仅是声音延迟。我的戏剧方法:
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();
}
}
消息只是一个显示在屏幕中间的字符串,它都可以工作,但它需要某种延迟,所以声音不会持续播放,而是像每10秒钟之后,或者只有当你相交时它,有一次。你们能告诉我如何做到这一点的任何线索吗?谢谢!
答案 0 :(得分:0)
声音继续播放的原因是因为每个节拍的条件仍然正确。声音完成后,交叉点仍然有效,因此声音将再次播放。
防止重复的一种非常简单的方法是使用变量来跟踪您是否播放了声音。像这样的东西,虽然这是未经测试的:
将此部分放在某个不会每次打勾都会改变的地方:
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();
}
}
}
答案 1 :(得分:0)
我对你的意思有点困惑。如果你只想让音乐播放一次,一个简单的解决方法是在某个地方声明一个布尔字段,以确定是否已经有赢家。然后只有在没有获胜者的情况下播放声音。