Java 为游戏添加声音。需要帮助
我有这段代码,我想知道如何将它与游戏的其他部分结合起来,因为它现在播放声音的唯一方式就是选择这个类作为启动器。另外,我可以得到一些信息,到底是什么改变了,为什么。我觉得我应该更好地理解这段代码,因为我刚刚找到了代码,并粘贴了它:D 代码:Java 为游戏添加声音。需要帮助,java,audio,Java,Audio,我有这段代码,我想知道如何将它与游戏的其他部分结合起来,因为它现在播放声音的唯一方式就是选择这个类作为启动器。另外,我可以得到一些信息,到底是什么改变了,为什么。我觉得我应该更好地理解这段代码,因为我刚刚找到了代码,并粘贴了它:D 代码: 这个类是一个非常普通的类:构造一个实例,调用一些方法,然后它完成预期的任务。当您将其用作启动器时,所做的只是调用main方法,该方法作为如何使用此类的示例: public static void main(String[] args) { String
这个类是一个非常普通的类:构造一个实例,调用一些方法,然后它完成预期的任务。当您将其用作启动器时,所做的只是调用main方法,该方法作为如何使用此类的示例:
public static void main(String[] args) {
String audioFilePath = "res/music/dark_theme.wav";
AudioPlayer player = new AudioPlayer();
player.play(audioFilePath);
}
只需构造一个实例,并使用音频文件的名称对其调用play()
然而,要注意的是,本课程并不是一个很好的例子,因为以下几个原因:
- 它会在播放时阻塞,这意味着你不能在播放声音的同时做一些不同的事情李>
- 它不能在不引起问题的情况下多次播放声音
谢谢,它现在变得更有意义了:D另外,你能解释一下,我如何使它循环吗?@Krycer稍等,我正在完全重组这篇文章,重新编写这个类,以拥有更多的功能,而不是遇到我提到的一些问题。另外,通过阻止,你的意思是,它不能移动我的玩家吗,当我播放它时?@Krycer正确,在它完成之前,你不能做任何事情,除非你使用一种叫做多线程的特殊功能。@Krycer你仍然需要相同的导入。
public static void main(String[] args) {
String audioFilePath = "res/music/dark_theme.wav";
AudioPlayer player = new AudioPlayer();
player.play(audioFilePath);
}
import main.Handler;
import java.io.File;
import java.io.IOException;
import javax.sound.sampled.AudioFormat;
import javax.sound.sampled.AudioInputStream;
import javax.sound.sampled.AudioSystem;
import javax.sound.sampled.Clip;
import javax.sound.sampled.DataLine;
import javax.sound.sampled.LineEvent;
import javax.sound.sampled.LineListener;
import javax.sound.sampled.LineUnavailableException;
import javax.sound.sampled.UnsupportedAudioFileException;
public class AudioPlayer{
Clip audioClip;
boolean playCompleted;
String path;
public AudioPlayer(String path){
this.path = path;
File audioFile = new File(path);
try {
AudioInputStream audioStream = AudioSystem.getAudioInputStream(audioFile);
AudioFormat format = audioStream.getFormat();
DataLine.Info info = new DataLine.Info(Clip.class, format);
audioClip = (Clip) AudioSystem.getLine(info);
audioClip.open(audioStream);
} catch (UnsupportedAudioFileException ex) {
System.out.println("The specified audio file is not supported.");
ex.printStackTrace();
} catch (LineUnavailableException ex) {
System.out.println("Audio line for playing back is unavailable.");
ex.printStackTrace();
} catch (IOException ex) {
System.out.println("Error playing the audio file.");
ex.printStackTrace();
}
}
void play() {
audioClip.start();
}
void loop(){
audioClip.loop(Clip.LOOP_CONTINUOUSLY);
}
void stop(){
audioClip.stop();
}
void cleanup(){
audioClip.close();
}
public static void main(String[] args) throws InterruptedException {
String audioFilePath = "res/music/dark_theme.wav";
AudioPlayer player = new AudioPlayer(audioFilePath);
player.play();
// give the sound time to play
while(true){
Thread.sleep(1000);
}
}
}