我目前正在编写游戏,现在我也想添加声音。我目前的方法效果很好,但我对此并不满意。
new Sound(new Resource().readAndGetStream("small_click.wav")).play();
此代码行在执行时会读取文件small_click.wav
。但是我认为在需要时总是读取资源文件不是很有效。因此,我现在要做的是将声音缓存在变量中,或者不必重新从文件中加载声音。但是我也想从声音中创建一个新的对象,因此我可以多次播放它,并在扬声器中播放它。我找不到解决方法。我已经尝试使用线程,但是..此代码可以在没有任何线程的情况下工作。
如果您想知道,这是Sound类的代码:
public Sound(InputStream audioSrc) {
try {
InputStream bufferedIn = new BufferedInputStream(audioSrc);
AudioInputStream audioStream = AudioSystem.getAudioInputStream(bufferedIn);
clip = AudioSystem.getClip();
clip.open(audioStream);
} catch {
...exception handling...
}
}
public void play() {
clip.setFramePosition(0);
clip.start();
}
并且如果您想知道“ new Resource()。readAndGetStream()”的作用,请执行以下操作:它基本上会加载资源,并使用InputStream
返回该资源的getResourceAsStream()
。
我目前正在编写游戏,现在我也想添加声音。我目前的方法效果很好,但我对此并不满意。 new Sound(new Resource()。readAndGetStream(“ small_click.wav”))。play(); ...
Sound[] soundCache
的数组,并执行示例中给出的代码行的第一部分。soundCache[0] = new Sound(new Resource().readAndGetStream("small_click.wav"));