坦克大战--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)音乐播放的更多相关文章
- 坦克大战--Java类型 ---- (2)按键设置和用户名的输入
一.实现思路(emmmm,这个地方我很大程度参照了别人的写法) 由于键盘按键众多,因此使用选择框JComboBox 进行按键选择,点击一个JButton 按钮后,读取所有选择框中的内容,然后存到一 ...
- 坦克大战--Java类型
写在前面 Java编译器下载教程(真的良心):https://blog.csdn.net/Haidaiya/article/details/81230636 本项目为本人独自制作,请各位尊 ...
- 坦克大战--Java类型 ---- (3)实现socket通信
一.实现思路 使用socket通信的一些方法来实现socket通信,客户端和服务端两边需要约定好通信的接口Port(尽量选高的),客户端需要服务端的IP地址,以实现数据交流. 同时,客户端和服务端需要 ...
- 坦克大战java版
吃了可以加血的血块类 import java.awt.*; public class Blood { //血块移动的路径 int[][] pos = { {450,250},{450,252},{45 ...
- 躁!DJ 风格 Java 桌面音乐播放器
本文适合有 Java 基础知识的人群,跟着本文可学习和运行 Java 版桌面 DJ 音乐播放器. 本文作者:HelloGitHub-秦人 HelloGitHub 推出的<讲解开源项目>系列 ...
- Java坦克大战(四)
这是我的坦克游戏大战的最后一版,里面添加很多新的功能.这个坦克大战的有很多不足之处,但是对于初学者来说依然是一个很好的练习项目,从中我们可以学习Java基础知识,将知识与项目结合,学习面向对象编程思想 ...
- (java项目)坦克大战 2.0
这个版本,只能算是一个雏形,把最基本的东西给完成了,不过,后面可添加的也不多.有一点,还是想去实现,那就是敌方坦克自己寻找对手!也就是游戏AI. emmm, 什么时候可以了解一下这个AI.顺便学学py ...
- java制作简单的坦克大战
坦克大战是我们小时候玩红白机时代的经典游戏,看到有不少小伙伴都使用各种语言实现了一下,手痒痒,也使用java做的一个比较简单的坦克大战,主要面向于学过Java的人群,与学了一段时间的人,有利于面向对象 ...
- Java小项目--坦克大战(version1.0)
Java小项目--坦克大战<TankWar1.0> 这个小项目主要是练习j2se的基础内容和面向对象的思想.项目实现了基本的简单功能,我方一辆坦克,用上下左右键控制移动方向,按F键为发射炮 ...
随机推荐
- mock的那点事
前言: Mock在GitHub上有12.9K的star可以看出,它在技术团队中是挺受欢迎的.这项技术被应用在不同领域的项目中. 适用场景: 下面我结合我们技术团队,列举最适合引入我们Mock服务的场景 ...
- BZOJ1718分离的路径
边双题. 求的就是最少加几条边可以使一个图变成边双联通图. 首先tarjan求一下边双,缩完点变成一颗树,统计度数为1的点(无根树的叶子),把这个数算出来,设为x,则ans=(x+1)/2. 这个可以 ...
- TCP输入 之 tcp_queue_rcv
tcp_queue_rcv用于将接收到的skb加入到接收队列receive_queue中,首先会调用tcp_try_coalesce进行分段合并到队列中最后一个skb的尝试,若失败则调用__skb_q ...
- TCP滑动窗口Sliding Window
滑动窗口的发送窗口示意图如下,其中由对端通告的窗口窗口大小为6,窗口中和窗口外的数据分别表示为:1-3发送并已经被确认的数据段,4-6发送但尚未被确认的数据段,7-9能够发送尚未发送的数据段,10-… ...
- MySQL 主从复制 (CentOS 7)
1.主从复制原理 (1) 当master 服务器上的数据发生改变时,则将其改变写入二进制日志文件中: (2) slave服务器会在一定时间间隔内对 master 服务器上的二进制日志进行探测,探测其是 ...
- SRGAN 学习心得
一.理论 关于SRGAN的的论文中文翻译网上一大堆,可以直接读网络模型(大概了解),关于loss的理解,然后就能跑代码 loss = mse + 对抗损失 + 感知损失 : https://bl ...
- RBAC 权限模型
RBAC 0 模型 最基本的 MySQL 脚本,没有建立外键约束. /* Navicat Premium Data Transfer Source Server Type : MySQL Source ...
- 反射 go
reflect.Valueof 到底是个什么? 反射值对象(reflect.Value)提供一系列方法进行零值和空判定,如下表所示. 反射值对象的零值和有效性判断方法 方 法 说 明 IsNil() ...
- 《视觉SLAM十四讲》第2讲
目录 一 视觉SLAM中的传感器 二 经典视觉SLAM框架 三 SLAM问题的数学表述 注:原创不易,转载请务必注明原作者和出处,感谢支持! 本讲主要内容: (1) 视觉SLAM中的传感器 (2) 经 ...
- EPOLL内核原理极简图文解读(转)
预备知识:内核poll钩子原理内核函数poll_wait把当前进程加入到驱动里自定义的等待队列上 当驱动事件就绪后,就可以在驱动里自定义的等待队列上唤醒调用poll的进程 故poll_wait作用:可 ...