• 坦克大战--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();//由于使用多线程进行播放,所以需要先开启音乐播放线程
            //由于对音乐的开关的控制在游戏的其他地方,所以这个地方如果不手动结束程序,音乐不会停止
        }
    }
  • 相关阅读:
    PHP面向对象编程入门
    PHP错误处理机制
    PHP数组深入
    PHP 表单
    多重背包之单调队列优化理论性总结
    二分查找理论性总结
    大连海事大学第十届程序设计竞赛 题解
    Codeforces Round #603 (Div. 2) E. Editor (线段树维护前缀和最值)
    Educational Codeforces Round 77 (Rated for Div. 2) E. Tournament (DP)
    Leetcode1256 加密数字(手动找规律)
  • 原文地址:https://www.cnblogs.com/winter-bamboo/p/10699740.html
Copyright © 2020-2023  润新知