栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

纯Java代码实现流星划过天空

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

纯Java代码实现流星划过天空

废话不多说了,直接给大家贴java代码了。

import java.awt.Color;
  import java.awt.Graphics;
  import java.awt.image.BufferedImage;
  import javax.swing.Jframe;
  import javax.swing.JPanel;
  public class MeteorFly extends Jframe {
   final int MAX = ; // (~)流星的个数
   final int SLEEP = ; // 流星飞行的速度(数值越大,速度越慢)
   final int COLORLV = ; // (~)色阶(可改变光晕大小)
   final String COLOR = null; // ("#"~"#ffffff")光晕颜色(如果不填或null,则为默认颜色)
   final int SIZE = ; // (~)流星大小
   private MyPanel panel;
   public MeteorFly() {
   panel = new MyPanel();
   this.getContentPane().add(panel);
   this.setSize(, ); // 创建窗体
   this.setDefaultCloseOperation(Jframe.EXIT_ON_CLOSE);
   this.setVisible(true);
   }
   public static void main(String[] args) {
   new MeteorFly();
   }
   class MyPanel extends JPanel implements Runnable {
   Meteor p[];
   int AppletWidth, AppletHeight;
   BufferedImage OffScreen;
   Graphics drawOffScreen;
   Thread pThread;
   public MyPanel() {
     setBackground(Color.black); //窗体初始化
     AppletWidth = ;
     AppletHeight = ;
     p = new Meteor[MAX];
     for (int i = ; 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();
   }
   @Override
   public void paintComponent(Graphics g) {
     // TODO Auto-generated method stub
     super.paintComponents(g);
     g.drawImage(OffScreen, , , this);
   }
   @Override
   final public void run() {
     while (true) {
     // drawOffScreen.clearRect(, , AppletWidth, AppletHeight); //
     // 清屏
     for (int i = ; 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;
// if (p[i].x > AppletWidth || p[i].y > AppletHeight) {
// p[i].reset();
// }
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 == && G == && B == ) {
  break;
}
R -= COLORLV; // 尾部颜色淡化
if (R < ) {
  R = ;
}
G -= COLORLV;
if (G < ) {
  G = ;
}
B -= COLORLV;
if (B < ) {
  B = ;
}
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) {
// TODO Auto-generated catch block
e.printStackTrace();
     }
     }
   }
   }
   class Meteor { // 流星类
   int x, y; // 流星的位置
   int mx, my; // 下落速度
   Color color; // 流星颜色
   public Meteor() {
     reset();
   }
   public void reset() {
     int rand = (int) (Math.random() * ); //随机生成流星出现位置
     if (rand > ) {
     x = (int) (Math.random() * );
     y = ;
     } else {
     y = (int) (Math.random() * );
     x = ;
     }
     mx = (int) (Math.random() * + ); //随机生成下落速度和角度
     my = (int) (Math.random() * + );
     if (COLOR == null || COLOR.length() == ) {
     color = new Color(
// 随机颜色
(new Double(Math.random() * )).intValue() + ,
(new Double(Math.random() * )).intValue() + ,
(new Double(Math.random() * )).intValue() + );
     } else {
     color = Color.decode(COLOR);
     }
   }
   }
 }

以上代码就是本文给大家讲述的纯Java代码实现流星划过天空,希望本文分享能够给大家带来意想不到的收获。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/151075.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号