簡體   English   中英

如何停止Java游戲的聲音

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM