純Java代碼實現(xiàn)流星劃過天空
更新時間:2015年10月29日 09:41:26 作者:_Nick
本文給大家介紹純java代碼實現(xiàn)流星劃過天空,包括流星個數(shù),流星飛行的速度,色階,流星大小相關(guān)變量設(shè)置。對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 = ; // (~)流星的個數(shù)
final int SLEEP = ; // 流星飛行的速度(數(shù)值越大,速度越慢)
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(, ); // 創(chuàng)建窗體
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() * ); //隨機生成流星出現(xiàn)位置
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代碼實現(xiàn)流星劃過天空,希望本文分享能夠給大家?guī)硪庀氩坏降氖斋@。
相關(guān)文章
springsecurity中http.permitall與web.ignoring的區(qū)別說明
這篇文章主要介紹了springsecurity中http.permitall與web.ignoring的區(qū)別說明,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2021-08-08
Java使用JDK與Cglib動態(tài)代理技術(shù)統(tǒng)一管理日志記錄
這篇文章主要介紹了Java使用JDK與Cglib動態(tài)代理技術(shù)統(tǒng)一管理日志記錄,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-05-05
深入學(xué)習(xí)JavaWeb中監(jiān)聽器(Listener)的使用方法
這篇文章主要為大家詳細介紹了深入學(xué)習(xí)JavaWeb中監(jiān)聽器(Listener)的使用方法,具有一定的參考價值,感興趣的小伙伴們可以參考一下2016-09-09
idea?maven?經(jīng)常主目錄自動變回默認的解決方法
很多朋友反映idea?maven?經(jīng)常主目錄自動變回默認,遇到這樣的問題真的很頭疼,該如何解決呢?下面小編給大家介紹下idea?maven目錄變回默認的解決方法,需要的朋友可以參考下2022-08-08

