当用户继续时,我正在尝试停止正在播放的特定方法
I am trying to stop a specific method thats being played when the user moves on
我正在制作一款游戏,具体来说是一款危险游戏,在游戏中我有背景噪音,例如,如果用户答对了一个问题,就会播放叮当声和人群欢呼声。这不是一个严重的游戏中断问题,但是我想知道如果用户在提示的 JOptionPane 中单击 "ok" 是否有任何方法可以阻止噪音。我还想声明我是编码新手。
我已经尝试搜索如何停止正在播放的文件但是我找不到任何东西所以如果有人知道如何制作它那么可以停止正在播放的文件或文件的方法本身可以停举行那该多好。
package testing;
import java.awt.Color;
import java.awt.Font;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.File;
import static java.awt.Font.BOLD;
import javax.sound.sampled.AudioSystem;
import javax.sound.sampled.Clip;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JOptionPane;
public class testing implements ActionListener{
static String Choice;
static String[][] Questions = {{"The Raptor is the mascot for which basketball team"}};
static String[][] Answers = {{"Toronto Raptors"}};
public JButton[][] t = new JButton[5][5];
public static void main(String[] args) {
new testing();
}
static int n = 100;
public testing() {
JFrame scoreframe = new JFrame("SCORE");
scoreframe.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
scoreframe.setSize(400,250);
scoreframe.setVisible(true);
JFrame gameframe = new JFrame("Jeopardy");
gameframe.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
gameframe.setSize(1920,1080);
gameframe.setLayout(new GridLayout(6, 4));
for (int r = 0; r < 5; r++) {
for (int c = 0; c < 5; c++) {
String vakue = String.valueOf(n);
t[r][c] = new JButton(vakue);
t[r][c].setBackground(Color.BLUE);
t[r][c].setForeground(Color.YELLOW);
t[r][c].putClientProperty("rows", r);
t[r][c].putClientProperty("columns", c);
t[r][c].setFont(new Font("Swis721 BlkEx BT", BOLD, 40));
t[r][c].addActionListener(this);
gameframe.add(t[r][c]);
}
n = n +300;
gameframe.setVisible(true);
}
}
public static void crowd() {
try {
File file = new File( "crowd.wav");
Clip clip = AudioSystem.getClip();
clip.open(AudioSystem.getAudioInputStream(file));
clip.start();
} catch (Exception e) {
}
}
public static void applause() {
try {
File file = new File( "Applause.wav");
Clip clip = AudioSystem.getClip();
clip.open(AudioSystem.getAudioInputStream(file));
clip.start();
} catch (Exception e) {
}
}
public static void check() {
try {
File file = new File( "check.wav");
Clip clip = AudioSystem.getClip();
clip.open(AudioSystem.getAudioInputStream(file));
clip.start();
} catch (Exception e) {
}
}
@Override
public void actionPerformed(ActionEvent e) {
JButton A = new JButton();
A = (JButton) e.getSource();
int rows = (int) A.getClientProperty("rows");
int cols = (int) A.getClientProperty("columns");
Choice = JOptionPane.showInputDialog(null, Questions[rows][cols]);
String score = A.getText();
A.addActionListener(this);
if (Choice.equalsIgnoreCase(Answers[rows][cols])) {
check();
applause();
crowd();
JOptionPane.showMessageDialog(null, "That's right! The correct answer was: " + Answers[rows][cols]+"! \nYou win " + score + "$");
A.setEnabled(false);
}
}
}
我缩小了我的代码范围,这样如果有人试图在他们的程序中尝试它,他们就不必处理任何额外的事情。基本上,我分解了我的代码以显示问题,我知道您将无法听到声音,但是出于帮助目的,我们假设声音都是 10 分钟长的(它们不是真的,但可以说它们是) 如果你 运行 我的代码并点击位置 1,1 的第一个按钮,它会问你猛禽是哪个篮球队的吉祥物,所以当你输入答案时 ("Toronto Raptors") 会出现一条消息告诉用户他们答对了问题以及他们赚了多少钱,这时 10 分钟的音乐正在后面播放。他们单击 "ok" 并且音乐保留在整个音轨的后面,我怎样才能做到这一点,所以当用户单击 "ok" 时声音停止?
首先,您想持有对当前剪辑的引用(无论它是否正在播放都无关紧要)。为此,创建一个保存剪辑的静态变量。然后定义play
和stop
函数,每次play
的时候都会先尝试stop
。此外,最好不要在不同的功能中复制和粘贴相同的代码:
private static Clip clip = null;
public static void stop() {
if (clip != null) {
clip.stop();
clip = null;
}
}
public static void play(String toPlayName) {
stop();
File toPlay = new File(toPlayName);
try {
clip = AudioSystem.getClip();
clip.open(AudioSystem.getAudioInputStream(toPlay));
clip.start();
} catch (Exception e) {
}
}
public static void crowd() {
play("crowd.wav");
}
public static void applause() {
play("Applause.wav");
}
public static void check() {
play("check.wav");
}
我正在制作一款游戏,具体来说是一款危险游戏,在游戏中我有背景噪音,例如,如果用户答对了一个问题,就会播放叮当声和人群欢呼声。这不是一个严重的游戏中断问题,但是我想知道如果用户在提示的 JOptionPane 中单击 "ok" 是否有任何方法可以阻止噪音。我还想声明我是编码新手。
我已经尝试搜索如何停止正在播放的文件但是我找不到任何东西所以如果有人知道如何制作它那么可以停止正在播放的文件或文件的方法本身可以停举行那该多好。
package testing;
import java.awt.Color;
import java.awt.Font;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.File;
import static java.awt.Font.BOLD;
import javax.sound.sampled.AudioSystem;
import javax.sound.sampled.Clip;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JOptionPane;
public class testing implements ActionListener{
static String Choice;
static String[][] Questions = {{"The Raptor is the mascot for which basketball team"}};
static String[][] Answers = {{"Toronto Raptors"}};
public JButton[][] t = new JButton[5][5];
public static void main(String[] args) {
new testing();
}
static int n = 100;
public testing() {
JFrame scoreframe = new JFrame("SCORE");
scoreframe.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
scoreframe.setSize(400,250);
scoreframe.setVisible(true);
JFrame gameframe = new JFrame("Jeopardy");
gameframe.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
gameframe.setSize(1920,1080);
gameframe.setLayout(new GridLayout(6, 4));
for (int r = 0; r < 5; r++) {
for (int c = 0; c < 5; c++) {
String vakue = String.valueOf(n);
t[r][c] = new JButton(vakue);
t[r][c].setBackground(Color.BLUE);
t[r][c].setForeground(Color.YELLOW);
t[r][c].putClientProperty("rows", r);
t[r][c].putClientProperty("columns", c);
t[r][c].setFont(new Font("Swis721 BlkEx BT", BOLD, 40));
t[r][c].addActionListener(this);
gameframe.add(t[r][c]);
}
n = n +300;
gameframe.setVisible(true);
}
}
public static void crowd() {
try {
File file = new File( "crowd.wav");
Clip clip = AudioSystem.getClip();
clip.open(AudioSystem.getAudioInputStream(file));
clip.start();
} catch (Exception e) {
}
}
public static void applause() {
try {
File file = new File( "Applause.wav");
Clip clip = AudioSystem.getClip();
clip.open(AudioSystem.getAudioInputStream(file));
clip.start();
} catch (Exception e) {
}
}
public static void check() {
try {
File file = new File( "check.wav");
Clip clip = AudioSystem.getClip();
clip.open(AudioSystem.getAudioInputStream(file));
clip.start();
} catch (Exception e) {
}
}
@Override
public void actionPerformed(ActionEvent e) {
JButton A = new JButton();
A = (JButton) e.getSource();
int rows = (int) A.getClientProperty("rows");
int cols = (int) A.getClientProperty("columns");
Choice = JOptionPane.showInputDialog(null, Questions[rows][cols]);
String score = A.getText();
A.addActionListener(this);
if (Choice.equalsIgnoreCase(Answers[rows][cols])) {
check();
applause();
crowd();
JOptionPane.showMessageDialog(null, "That's right! The correct answer was: " + Answers[rows][cols]+"! \nYou win " + score + "$");
A.setEnabled(false);
}
}
}
我缩小了我的代码范围,这样如果有人试图在他们的程序中尝试它,他们就不必处理任何额外的事情。基本上,我分解了我的代码以显示问题,我知道您将无法听到声音,但是出于帮助目的,我们假设声音都是 10 分钟长的(它们不是真的,但可以说它们是) 如果你 运行 我的代码并点击位置 1,1 的第一个按钮,它会问你猛禽是哪个篮球队的吉祥物,所以当你输入答案时 ("Toronto Raptors") 会出现一条消息告诉用户他们答对了问题以及他们赚了多少钱,这时 10 分钟的音乐正在后面播放。他们单击 "ok" 并且音乐保留在整个音轨的后面,我怎样才能做到这一点,所以当用户单击 "ok" 时声音停止?
首先,您想持有对当前剪辑的引用(无论它是否正在播放都无关紧要)。为此,创建一个保存剪辑的静态变量。然后定义play
和stop
函数,每次play
的时候都会先尝试stop
。此外,最好不要在不同的功能中复制和粘贴相同的代码:
private static Clip clip = null;
public static void stop() {
if (clip != null) {
clip.stop();
clip = null;
}
}
public static void play(String toPlayName) {
stop();
File toPlay = new File(toPlayName);
try {
clip = AudioSystem.getClip();
clip.open(AudioSystem.getAudioInputStream(toPlay));
clip.start();
} catch (Exception e) {
}
}
public static void crowd() {
play("crowd.wav");
}
public static void applause() {
play("Applause.wav");
}
public static void check() {
play("check.wav");
}