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