java制作超炫流星雨表白,java 表白
目录
介绍核心代码注意事项
介绍
本文实现的功能有:
1、播放音乐
2、自定义流星数量、飞行速度、光晕大小、流星大小
3、自定义表白话语
运用到的知识点有:
GUI:java实现窗体、摇摆.其实界面设计的图像使用者界面目前企业中已经不用了,主要是一些学校和培训机构用来教导学生写一些游戏、小项目,练练手的。
多线程:让中央处理器同一时间处理多个任务(本文中涉及到音乐、文字缓慢出现、流星线条移动)
效果图:
音乐类(其实也可以不用音乐,有些人并不喜欢):
核心代码
导入javazoom。JL。解码器。javalayerexception导入javazoom。JL。玩家。玩家;导入Java。io。文件;导入Java。io。文件输入流;导入Java。io。filenotfoundexception公共类音乐线程扩展thread { @ Override public void run(){//播放音乐System.out.println(开始播放);//表示音乐文件文件f=新文件(‘NV。MP3’);//第三方冲突包运动员类试试{ Player p=new Player(新文件inputstream(f));//参数:文件输入流对象//p . play();} catch(文件未找到异常 JavaLayerException e){ e . printstacktrace();} }}实现类:
导入javazoom。JL。解码器。javalayerexception导入javazoom。JL。玩家。玩家;导入Java。awt。*;导入Java。awt。形象。缓冲图像;导入Java。io。*;导入Java。util。随机;导入javax。挥棒。*;公共类流星扩展了JFrame { int AppletWidth,appletheight final int MAX=6;//(~)流星的个数最终int SLEEP=2;//流星飞行的速度(数值越大,速度越慢)final int COLORLV=1;//(~)色阶(可改变光晕大小)final int SIZE=3;//(~)流星大小私有我的面板面板;公流星飞(){ panel=new my panel();this.setTitle(爱);this.getContentPane().添加(面板);this.setSize(AppletWidth,applet height);//创建窗体这个。setdefaultcloseoperation(JFrame .EXIT _ ON _ CLOSE);这个。设置可见(真);} public static void main(String[]args){ new Thread(){ @ Override public void run(){//声明一个文件对象文件mp3=新文件(‘NV。MP3’);//创建一个输入流file inputstream file inputstream=null;尝试{ file inputstream=新文件inputstream(MP3);//创建一个缓冲流BufferedInputStream BufferedInputStream=新的缓冲输入
Stream(fileInputStream); //创建播放器对象,把文件的缓冲流传入进去 Player player = new Player(fileInputStream); //调用播放方法进行播放 player.play(); } catch (FileNotFoundException e) { e.printStackTrace(); } catch (JavaLayerException e) { e.printStackTrace(); } } }.start(); new MeteorFly(); } class MyPanel extends JPanel implements Runnable { Meteor p[]; BufferedImage OffScreen; Graphics drawOffScreen; Thread pThread; Font drawFont = new Font("Arial",0,28); public MyPanel() { //setBackground(Color.black); //窗体初始化 AppletWidth = Toolkit.getDefaultToolkit().getScreenSize().width; AppletHeight = Toolkit.getDefaultToolkit().getScreenSize().height-200; p = new Meteor[MAX]; for (int i = 0; i < MAX; i++) { p[i] = new Meteor(); } OffScreen = new BufferedImage(AppletWidth, AppletHeight, BufferedImage.TYPE_INT_BGR); drawOffScreen = OffScreen.getGraphics(); pThread = new Thread(this); pThread.start(); new Thread(){ @Override public void run() { try { sleep(2000); } catch (InterruptedException e) { e.printStackTrace(); } str1 = "流星雨是世间宝藏,而你是我的人间理想"; while(true){ try { sleep(150); } catch (InterruptedException e) { e.printStackTrace(); } pos++; if (pos > str1.length() - 1) { pos = str1.length() - 1; break; } } } }.start(); } int pos = 0; String str1 = " "; @Override public void paintComponent(Graphics g) { super.paintComponents(g); g.drawImage(OffScreen, 0, 0, this); g.setColor(Color.pink); g.setFont(new Font("宋体", Font.BOLD, 50)); g.drawString(str1.substring(0,pos+1),260,700); } @Override public void run() { while (true) { for (int i = 0; i < MAX; i++) { drawOffScreen.setColor(p[i].color); // RGB颜色 drawOffScreen.fillOval(p[i].x, p[i].y, SIZE, SIZE); p[i].x += p[i].mx; p[i].y += p[i].my; int x = p[i].x; int y = p[i].y; int R = p[i].color.getRed(); // 提取颜色 int G = p[i].color.getGreen(); int B = p[i].color.getBlue(); while (true) { if (R ==0 && G ==0 && B ==0 ) { break; } R -= COLORLV; // 尾部颜色淡化 if (R <0 ) { R =0 ; } G -= COLORLV; if (G <0 ) { G =0 ; } B -= COLORLV; if (B < 0) { B =0 ; } Color color = new Color(R, G, B); x -= p[i].mx; // 覆盖尾部 y -= p[i].my; drawOffScreen.setColor(color); drawOffScreen.fillOval(x, y, SIZE, SIZE); } if (x > AppletWidth y > AppletHeight) { // 流星飞出窗口,重置流星 p[i].reset(); } } repaint(); try { Thread.sleep(SLEEP); } catch (InterruptedException e) { } } } } class Meteor { // 流星类 int x, y; // 流星的位置 int mx, my; // 下落速度 Color color; // 流星颜色 Random r = new Random(); public Meteor() { reset(); } public void reset() { int rand = (int) (Math.random() *100 ); //随机生成流星出现位置 if (rand >35 ) { x = (int) (Math.random() *600 ); y = 0; } else { y = (int) (Math.random() * 150); x =0 ; } mx = r.nextInt(2)+2; //随机生成下落速度和角度 my = 1; color = new Color( // 随机颜色 (new Double(Math.random() *128 )).intValue() +128 , (new Double(Math.random() *128 )).intValue() +128 , (new Double(Math.random() * 128)).intValue() + 128); } }}这里的Player类需要自己导包,包我放在这个链接里了:
链接提取码:v22q
注意事项
导包过程中可能有些人会出现这种问题:
实际应该是可以打开的:
如何导包:
先要将包复制粘贴到项目包下
然后进入:File –> Project Structure
然后依次点击Libraries、+号、Java
找到你要导的文件的位置,然后一直点OK就行了。
以上就是Java实现浪漫流星表白的示例代码的详细内容,更多关于Java流星的资料请关注盛行IT其它相关文章!
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。