坦克大戰--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();//由於使用多線程進行播放,所以需要先開啟音樂播放線程
        //由於對音樂的開關的控制在游戲的其他地方,所以這個地方如果不手動結束程序,音樂不會停止
    }
}

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM