【发布时间】:2021-07-09 21:40:50
【问题描述】:
我有以下代码可以在游戏中播放我的声音:
protected void playSound(final String sound, final int playTime){
try {
sounds.get(sound).open();
}
catch(Exception e) {
System.out.println(e);
}
new Thread(new Runnable() {
public void run() {
Clip actualClip = sounds.get(sound);
actualClip.setFramePosition(0);
if(playTime < 0){
actualClip.loop(Clip.LOOP_CONTINUOUSLY);
}
else{
actualClip.loop(playTime - 1);
}
}
}).start();
}
声音保存在哈希图中:
private HashMap<String, Clip> sounds;
当我“同时”播放两种不同的声音(相差 1 毫秒;))时,它们彼此平行播放;所以我可以同时听到两种声音。看起来像这样:
playSound("sound1", 1);
playSound("sound2", 1);
但是当我尝试两次播放相同的声音时,它不起作用:
playSound("sound1", 1);
//here its waiting in my programm
playSound("sound1", 1);
问题是,我想添加一个“死亡”声音 - 但两个小怪也可以同时死亡,或者只是在另一个之前一秒钟。当这种情况发生时,要么什么都没有发生,要么声音只播放一次。
为什么?我认为我在自己的线程中创建了同一文件的新 AudioClip?那么为什么它不起作用呢?
【问题讨论】:
-
问题要简明扼要,内容不能有Good day!或Thank you very much!等备注。这可能是有人编辑了您的问题的原因。您可以使用 cmets。
-
小建议,你应该使用接口
Map而不是使用实现! -
@GGrec "他们的内容必须缺少诸如 Good day! 或Thank you very much! 之类的备注。"它是否写在 SO 规则的某处?如果您遇到过,请分享链接。
-
@rahulserver 我在之前的常见问题解答中以及 meta. Here's 一个。
-
@marcAndre 这有什么特别的原因吗?但是,好吧,我改变了这一点。知道为什么我有这个问题吗? ://
标签: java multithreading audio