我正在制作一个游戏,并添加了音乐。问题是当我关闭游戏时,音乐仍在播放。
播放音乐的脚本:
try {
clip1 = AudioSystem.getClip();
try {
clip1.open(AudioSystem.getAudioInputStream(music));
} catch (IOException | UnsupportedAudioFileException e) {
e.printStackTrace();
}
if (!Settings.Music) {
return;
}
clip1.start();
} catch (LineUnavailableException e) {
e.printStackTrace();
}
循环音乐脚本:
public static void tick() {
if (clip1.isRunning()) {
if (!Settings.Music) {
clip1.stop();
// this makes music stop when player changes settings
}
}
if (Settings.Music) {
if (!clip1.isRunning()) {
playMusic(Game.music1);
}
}
}
您想要使用WindowListener
/WindowStateListener
,它允许您注册JFrame
的关闭、图标化等事件。在里面,你当然会暂停,或者启动音频。
你可以在这里阅读更多关于如何编写窗口监听器:
WindowStateListener
示例(可能是最简单的,没有那么详细,允许您比较以前的状态和新的状态,还有许多其他WindowEvent选项需要检查(:
frame.addWindowStateListener((WindowEvent e) -> {
if (e.getNewState() == WindowEvent.WINDOW_CLOSED
|| e.getNewState() == WindowEvent.WINDOW_ICONIFIED) {
// TODO stop the audio when window is closed or iconified (minimzed)
}
});
WindowListener
示例(稍微详细一点,但这里是为了完整性(:
frame.addWindowListener(new WindowListener() {
@Override
public void windowOpened(WindowEvent e) {
}
@Override
public void windowClosing(WindowEvent e) {
}
@Override
public void windowClosed(WindowEvent e) {
}
@Override
public void windowIconified(WindowEvent e) {
}
@Override
public void windowDeiconified(WindowEvent e) {
}
@Override
public void windowActivated(WindowEvent e) {
}
@Override
public void windowDeactivated(WindowEvent e) {
}
});