坦克大战--Java类型 ---- (1)音乐播放
实现原理
我用接口java.applet.AudioClip实现音乐播放,那么我们需要了解这个接口的情况。
我们主要使用其中的三个方法:
(1)void loop(); //循环播放
(2)void play(); //开始播放(单次)
(3)void stop(); //停止播放
虽然AudioClip 是一个接口,不能直接创建实例,但是java.applet.Applet 对象提供了一个静态的方法newAudioClip(),因此可以直接利用如下的语句,得到一个AudioClip 的实例引用:
AudioClip auu= java.applet.Applet.newAudioClip(new java.net.URL(this.jTextField1.getText()));
newAudioClip()方法的参数是声音文件的URL,具体如下:
static void newAudioClip(URL url);
那么现在我们需要了解URL是什么东西,URL是统一资源定位符,对可以从互联网上得到的资源的位置和访问方法的一种简洁的表示,是互联网上标准资源的地址。互联网上的每个文件都有一个唯一的URL,它包含的信息指出文件的位置以及浏览器应该怎么处理它(来自百度百科)。
目前的情况我们只需要知道URL可以保留音乐文件,那么我们用File保存音乐文件的内容,通过 FIle ---> URI ----> URL得到音乐文件URL,随后作为AudioClip的参数加入就可以了。
最后对于音乐的播放等等,我们就可以使用上面的三种方法实现音乐播放和关闭。
代码区(和游戏内部有一定区别,但效果一致)
package component; import java.applet.AudioClip; import java.io.*; import java.applet.Applet; import java.net.MalformedURLException; import java.net.URI; import java.net.URL; public class Music extends Thread { private File file; private URI uri; private URL url; private AudioClip aau; //由于游戏内部需要多种音乐,故根据参数的不同,方法不同的音乐 Music(int mode) { if (mode == 1) { file = new File("img/fire.wav"); } else if (mode == 2) { file = new File("img/head.wav"); } else if (mode == 3) { file = new File("img/mid.wav"); } else if (mode == 4) { file = new File("img/first.wav"); } else if (mode == 5) { file = new File("img/second.wav"); } else if (mode == 6) { file = new File("img/fifth.wav"); } else if (mode == 7) { file = new File("img/lost.wav"); } else if (mode == 8) { file = new File("img/win.wav"); } else if (mode == 9) { file = new File("img/end.wav"); } else if (mode == 10) { file = new File("img/ranking.wav"); } else if (mode == 11) { file = new File("img/set.wav"); } uri = file.toURI();//转化为URI try { url = uri.toURL();//转化为URL aau = Applet.newAudioClip(url); } catch (MalformedURLException e) { e.printStackTrace(); } // 解析地址 } public void run() { try { aau.loop(); // 循环播放 } catch (Exception e) { e.printStackTrace(); } } //外部控制音乐关闭 public void close() { aau.stop(); } //外部控制音乐开启 public void open() { aau.loop(); } public static void main(String[] args) { new Music(11).start();//由于使用多线程进行播放,所以需要先开启音乐播放线程 //由于对音乐的开关的控制在游戏的其他地方,所以这个地方如果不手动结束程序,音乐不会停止 } }