繁体   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