坦克大战--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();//由于使用多线程进行播放,所以需要先开启音乐播放线程
        //由于对音乐的开关的控制在游戏的其他地方,所以这个地方如果不手动结束程序,音乐不会停止
    }
}

 

你可能感兴趣的:(坦克大战--Java类型 ---- (1)音乐播放)