[英]How to stop sound for Java game
因此,我有一個此類在Netbeans的Java游戲中播放背景音樂。 我只想知道一些有關我的角色死亡時如何停止聲音的想法。 我嘗試制作一個公共布爾值isCollided變量,但是每當我的角色與另一個對象發生碰撞但它無法正常工作時,我都會嘗試這樣做。 我願意提出建議。
import controller.Main;
import javax.sound.sampled.AudioSystem;
import javax.sound.sampled.Clip;
public static boolean isCollided = false;
public static void play(String filename) {
new Thread(new Runnable() {
public void run() {
try {
Clip clip = AudioSystem.getClip();
clip.open(AudioSystem.getAudioInputStream(Main.class.getResourceAsStream(filename)));// new
// File(filename)));
if (isCollided) {
clip.stop();
} else {
clip.loop(0);
}
} catch (Exception exc) {
exc.printStackTrace(System.out);
}
}
}).start();
}
你嘗試過使用
clip.stop();
https://docs.oracle.com/javase/7/docs/api/javax/sound/sampled/DataLine.html#stop()
我看到您進行了一些修改。 由於您正在線程中運行剪輯,因此需要通過主方法來某種與線程交互的方式。 否則,它僅在線程啟動時檢查isCollided,而從不檢查更改。
一種方法是使isCollided成為全局變量,然后在剪輯線程中進行無限循環,以檢查isCollided並在其變為true時停止。 (帶有您的變量)類似
while (true) {
if (isCollided) {
clip.stop();
thread.interupt();
}
}
ETA:這是非常消耗處理器的。 您可能會增加一些延遲,例如
while (true) {
Thread.sleep(500);
if (isCollided) {
clip.stop();
thread.interupt();
}
}
以防止它過多地阻塞處理器。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.