我正在尝试将声音添加到我一直在开发的游戏中,但我无法让声音播放不止一次。我想我已经找到了原因,但我不知道如何解决它。我正在使用在搜索 Java 声音教程时发现的枚举器。
问题是我在一个线程中调用声音,在我的 update() 方法中,每次我调用声音的 play() 方法时,它都会重新开始剪辑。第一次调用它时,声音播放良好(我可能会有点僵硬),但之后播放声音的所有尝试都失败了。我没有收到任何异常或错误,只是没有播放声音。
public enum Sounds {
RIFLE("rifle_fire.wav");
private Clip clip;
Sounds(String filename) {
openClip(filename);
}
public synchronized void openClip(String filename) {
try {
URL audioFile = Sounds.class.getResource("/resources/sounds/" + filename);
AudioInputStream audio = AudioSystem.getAudioInputStream(audioFile);
AudioFormat format = audio.getFormat();
DataLine.Info info = new DataLine.Info(Clip.class, format);
clip = (Clip) AudioSystem.getLine(info);
clip.open(audio);
} catch (UnsupportedAudioFileException uae) {
System.out.println(uae);
} catch (IOException ioe) {
System.out.println(ioe);
} catch (LineUnavailableException lue) {
System.out.println(lue);
}
}
public synchronized void play() {
if(clip.isRunning()) clip.stop();
clip.setFramePosition(0);
clip.start();
}
public static void init() {
values();
}
}
那是我使用的枚举器。它是从我的主线程的 update() 方法中调用的,该方法每 20 毫秒更新一次。在更新方法中,我是这样称呼的。
// If the left mouse button is held down, create a new projectile.
if(Globals.buttons[0] && !player.isOnCooldown()) {
createParticle(pAngle);
Sounds.RIFLE.play();
}
有人建议我使用后需要关闭线路,但声音只打开一次......为什么我需要关闭它?有谁知道问题是什么?