首页 > 编程 > Java > 正文

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

2019-11-26 14:54:05
字体:
来源:转载
供稿:网友

废话不多说了,直接给大家贴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代码实现流星划过天空,希望本文分享能够给大家带来意想不到的收获。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表