廢話不多說了,直接給大家貼java代碼了。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
|
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代碼實現流星劃過天空,希望本文分享能夠給大家帶來意想不到的收獲。