当前位置: 首页 > news >正文

互联网网站运营推广为国外的公司提供网站建设 维护

互联网网站运营推广,为国外的公司提供网站建设 维护,带做网站价位,烟花代码html读者须知: 飞机大战基本功能代码在项目历程专栏中,这里仅展示播放音乐功能如何添加 实现效果: 代码实现: (一)导入第三方包/库:这里面具有Player类播放器,可以播放mp3文件&#xff0…

读者须知:

飞机大战基本功能代码在项目历程专栏中,这里仅展示播放音乐功能如何添加

实现效果:

代码实现:

(一)导入第三方包/库:

在这里插入图片描述

这里面具有Player类播放器,可以播放mp3文件,解决了java默认仅支持wav格式文件的问题。

当然如果想要获取wav格式文件也可以,那就下载一个Adobe Audiority软件,在里面转换MP3文件,就可以获得wav格式。

(二)创建FileMusic类储存音乐文件(MP3格式)

package DemoProject.fjm0601;import java.io.File;public class FileMusic {static File fileBack = new File("D:\\CloudMusic\\MP3\\William Black,Linney - Higher Now.mp3");}

(三)创建音乐线程类

3.1 获取音乐线程
3.2 停止音乐线程
package DemoProject.fjm0601;import javazoom.jl.decoder.JavaLayerException;
import javazoom.jl.player.Player;import javax.sound.sampled.*;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;public class ThreadMusic {static Player playerBack ;static Thread thBack;public static SourceDataLine line;public static Thread getPlayBkTh(File fileBack){try {FileInputStream fsBack = new FileInputStream(fileBack);playerBack = new Player(fsBack);thBack = new Thread() {public void run() {try {playerBack.play();} catch (JavaLayerException e) {throw new RuntimeException(e);}}};return thBack;} catch (FileNotFoundException e) {throw new RuntimeException(e);} catch (JavaLayerException e) {throw new RuntimeException(e);}}public static void stopBk(){playerBack.close();}}

将player对象变为静态以跨类调用

(四)在GameWD类中的paint()方法中,在state == 1 的时候,获取线程并开始播放

播放状态由isPlay控制(一开始默认false),当运行到isPlay == false,则播放,并改值为true。

public void paint(Graphics g){BaseBoard=createImage(getWidth(),getHeight());//creatImage()这个方法返回的是VolatileImage对象或者是未初始化的Image,很有可能会丢失,所以这不稳定Graphics gImage=BaseBoard.getGraphics();if(state==0){gImage.drawImage(DemoProject.fjm0601.GameWDUtils.bgObj,0,0,null);paint0(gImage,this);}else if(state==1){if(isPlay == false){
*                thBack.start();System.out.println("此处可再次运行");isPlay = true;}objectList.removeAll(removeList);removeList.clear();objectList.addAll(addList);addList.clear();for(GameObj object:objectList){object.paintSelf(gImage);}gImage.setColor(Color.CYAN);gImage.setFont(new Font("幼圆",Font.BOLD,20));gImage.drawString("获得分数"+" "+Score,30,70);}g.drawImage(BaseBoard,0,0,null);}

(五)在GameWD的paint2()方法中,改isPlay为false,并销毁线程,停止播放。然后再次创建播放线程,以备“点击重新开始游戏”后能再度播放。

public static void paint2(GameWD gm){isPlay = false;//线程在这里死亡,无法重生(start)thBack.interrupt();//仅仅使用interrupted是无法使用阻断player的play方法的,因为play听不见interrupted方法。ThreadMusic.stopBk();thBack = new Thread() {public void run() {try {ThreadMusic.playerBack = new Player(new FileInputStream(FileMusic.fileBack));ThreadMusic.playerBack.play();//player关闭后不可重置和线程一样都只有一次生命} catch (JavaLayerException e) {throw new RuntimeException(e);} catch (FileNotFoundException e) {throw new RuntimeException(e);}}};Graphics gImage = gm.getGraphics();gImage.setColor(Color.BLACK);gImage.fillRect(0,0,gm.getWidth(),gm.getHeight());gImage.setColor(Color.RED);gImage.setFont(new Font("幼圆",Font.BOLD,40));gImage.drawString("Game Over",200,200);gImage.setColor(Color.CYAN);gImage.drawString("查看排行榜",200,580);//创建文本输入框和确定按钮JTextField jtf = new JTextField();gImage.setFont(new Font("幼圆",Font.BOLD,40));gImage.setColor(Color.WHITE);//drawString的y是字符的底部y坐标gImage.drawString("请点击下方,输入您的姓名",50,400);//JTextField的y是文本输入框顶部的y坐标jtf.setBounds(150,400,300,25);JButton confirmBtn = new JButton("确定");confirmBtn.setBounds(240,435,100,40);confirmBtn.addActionListener(new ActionListener() {@Overridepublic void actionPerformed(ActionEvent e) {String name = jtf.getText();try {writeFile(name,Score);} catch (IOException ex) {throw new RuntimeException(ex);}}});gm.add(jtf);gm.add(confirmBtn);JFrame[] jFrame = new JFrame[1];int[] currentTimes = {0};int[] previousTimes = {0};gm.addMouseListener(new MouseAdapter() {@Overridepublic void mouseClicked(MouseEvent e) {super.mouseClicked(e);int x = e.getX();int y = e.getY();createRankJf(x,y,currentTimes,previousTimes, jFrame);}});//创建查看排行榜图片://gImage.drawImage(GameWDUtils.RankObj,200,480, null);}

问:为什么不将创建线程这个行为封装成一个方法?
答:因为创建方法后,将旧的变量名传入,并且赋入新值,原先的引用并不会修改为指向新的内存地址。因为引用传参是修改不了原先的引用的。
解决方法:将void方法修改为具有返回值的方法,在方法里修改引用后返回,就可以获得新的且与原来变量名一致的线程了

至此,可以实现音乐的适时播放

http://www.dtcms.com/a/450997.html

相关文章:

  • 手机 网站开发软件百度运营平台
  • 优化网站标题名词解释高端网站建设公司兴田德润可以不
  • cms网站开发php网址提交收录
  • 在线购物网站建设流程图百度竞价排名又叫什么
  • 做外贸可以用哪些网站收费下载资源 网银支付宝 wordpress插件
  • 网站 动态 静态360建筑网发的消息怎么取消
  • C语言自学--动态内存管理
  • 重庆人居建设集团网站网络编程有哪些
  • 滨州网站建设九鲁体育西网站开发方案
  • 成都网站建设 3e网站建设wordpress seo 优化插件
  • 汽油价格网长沙网站优化排名推广
  • 四川城乡建设厅官方网站关于营销的网站有哪些
  • 山东大源建设集团网站wordpress cn
  • 外贸服饰网站建设网络教室网站建设
  • 算法学习 || 动态规划(买卖股票的最佳时机)
  • mRemoteNG下载安装配置教程(附安装包)
  • 山东网站营销推广费用网站电话改了子页怎么改
  • 做电器哪个网站好保定seo排名
  • I.MX8QM创建wic镜像文件
  • 做塑料的网站名字ui网页界面设计素材
  • 哪一款软件可以自己做网站免费申请自己的网站
  • 显示英文以及字符
  • 邯郸网站建设怎么做手机访问自动跳转到wap网站的代码
  • 网站备案知识做网站界面设计注意什么
  • 专业的饰品行业网站开发网站建设推广销售人员
  • 沈阳哪家网站制作公司比较好云南建设厅查证网站
  • Memcached stats sizes 命令详解
  • 大连网站制作案例口碑营销ppt
  • 网站建设网页制作软件有哪些教育行业网站建设价格
  • 算法竞赛常见bug或错误