zoukankan      html  css  js  c++  java
  • 坦克大战--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();//由于使用多线程进行播放,所以需要先开启音乐播放线程
            //由于对音乐的开关的控制在游戏的其他地方,所以这个地方如果不手动结束程序,音乐不会停止
        }
    }
  • 相关阅读:
    ActiveMQ 即时通讯服务 浅析
    Asp.net Mvc (Filter及其执行顺序)
    ActiveMQ基本介绍
    ActiveMQ持久化消息的三种方式
    Windows Azure Virtual Machine (27) 使用psping工具,测试Azure VM网络连通性
    Azure China (10) 使用Azure China SAS Token
    Windows Azure Affinity Groups (3) 修改虚拟网络地缘组(Affinity Group)的配置
    Windows Azure Storage (22) Azure Storage如何支持多级目录
    Windows Azure Virtual Machine (26) 使用高级存储(SSD)和DS系列VM
    Azure Redis Cache (2) 创建和使用Azure Redis Cache
  • 原文地址:https://www.cnblogs.com/winter-bamboo/p/10699740.html
Copyright © 2011-2022 走看看