/*
目前成都創(chuàng)新互聯(lián)公司已為超過(guò)千家的企業(yè)提供了網(wǎng)站建設(shè)、域名、虛擬主機(jī)、網(wǎng)站改版維護(hù)、企業(yè)網(wǎng)站設(shè)計(jì)、無(wú)極網(wǎng)站維護(hù)等服務(wù),公司將堅(jiān)持客戶導(dǎo)向、應(yīng)用為本的策略,正道將秉承"和諧、參與、激情"的文化,與客戶和合作伙伴齊心協(xié)力一起成長(zhǎng),共同發(fā)展。
*實(shí)現(xiàn)在窗體上隨機(jī)布滿300個(gè)雪花("*"),滾動(dòng)
*在上次的課基礎(chǔ)上增加了for循環(huán)(一次要產(chǎn)生300個(gè)變量),隨機(jī)數(shù),數(shù)組 ;
*下面的序號(hào)為步驟
*/ import java.awt.* ; //(3)導(dǎo)入awt包
public class Star {
public static void main(String args[]) {
Frame w = new Frame() ; //(1)繪制窗體
w.setSize(1024,768) ; //(4)把窗體布滿全屏
w.setBackground(Color.BLACK) ; //(5)背景為黑顏色
MyPanel mp = new MyPanel() ; //(7)把MyPanel對(duì)象mp,添加到窗體w上
w.add(mp) ;
Thread t = new Thread(mp) ;
t.start() ; //(12)啟動(dòng)線程
w.show(); //(2)顯示窗體
}
}
//(6)繼承Panel類
class MyPanel extends Panel implements Runnable { //(11)實(shí)現(xiàn)Runnable接口
int x[] = new int[300] ;
int y[] = new int[300] ; //(8)定義300個(gè)數(shù)組變量 MyPanel(){
for(int i = 0;i 300; i++) {
x[i] = (int)(Math.random()*1024) ;
y[i] = (int)(Math.random()*768) ; //(9)當(dāng)程序走到第6步的時(shí)候程序就會(huì)調(diào)用構(gòu)成函數(shù)
} //由于隨機(jī)數(shù)是從0-1之間的數(shù)任意產(chǎn)出所以x乘以1024,y乘以768再轉(zhuǎn)換為int類型
}
public void paint(Graphics g) {
for(int i = 0;i 300; i++) {
g.setColor(Color.WHITE) ;
g.drawString("*",x[i],y[i]) ;
//g.drawString("*",30,30) ;(7)繪制一個(gè)星星在屏幕的x=30,y=30的位置上
} //(10)繪制300個(gè)雪花,把坐標(biāo)30,30,改成x[i],y[i] ;
} //做到這步可以實(shí)現(xiàn)在黑色的天空布滿300個(gè)星星
public void run() {
while(true) { //(13)實(shí)現(xiàn)產(chǎn)生300個(gè)雪花往下落死循環(huán)
for(int i = 0 ; i 300; i++) {
y[i]++ ; //(14)y坐標(biāo)不斷的+1
if(y[i] 768){ //(18)如果y軸坐標(biāo)大于768時(shí),則y = 0,回到窗體的頂部
y[i] = 0 ;
}
}
try{ //(16)用try,catch解決線程休眠的異常
Thread.sleep(20) ; //(15)在每次y軸坐標(biāo)+1后線程休眠20毫秒
}catch(Exception e) {}
repaint() ; //(17)雪花在新的位置重畫(huà)
}
}
}
在后臺(tái)添加js特效可實(shí)現(xiàn)這樣的效果。
js代碼為:
script language="JavaScript"
!--
var no = 5; //雪片數(shù)目
var speed = 20; //飄動(dòng)速度。(值越大越慢)
var ns4up = (document.layers) ? 1 : 0; //當(dāng)前瀏覽器類型,如果是NS則為1
var ie4up = (document.all) ? 1 : 0; //當(dāng)前瀏覽器類型,如果是IE則為1
var s, x, y, sn, cs;
var a, r, cx, cy;
var i, doc_width = 800, doc_height = 600;
x = new Array();
y = new Array();
r = new Array();
cx = new Array();
cy = new Array();
s = 8; //每次下落的高度,越小越平滑,但是也越慢
if (ns4up) { //以NS兼容方式
doc_width = self.innerWidth; //取頁(yè)面寬度
doc_height = self.innerHeight; //取頁(yè)面高度
}
else
if (ie4up) { //以IE兼容方式
doc_width = document.body.clientWidth; //取頁(yè)面寬度
doc_height = document.body.clientHeight; //取頁(yè)面高度
}
for (i = 0; i no; ++ i) { //根據(jù)前面定義的雪片數(shù)目寫(xiě)進(jìn)相應(yīng)數(shù)目的層
initSnow(); //隨機(jī)初始化層的坐標(biāo)
if (ns4up) { //如果瀏覽器是NS
//用layer作為雪片(星號(hào))的容器
document.write("layer name=\"dot"+ i +"\" left=\"1\" ");
document.write("top=\"1\" visibility=\"show\"font color=\"red\"");
document.write("*/font/layer");
}
else
if (ie4up) { //如果瀏覽器是IE
//用div作為雪片的容器
document.write("div id=\"dot"+ i +"\" style=\"POSITION: ");
document.write("absolute; Z-INDEX: "+ i +"; VISIBILITY: ");
document.write("visible; TOP: 15px; LEFT: 15px;\"font color=\"red\"");
document.write("*/font/div");
}
}
//初始化雪片,生成隨機(jī)坐標(biāo)
function initSnow() {
a = 6;
r[i] = 1;
sn = Math.sin(a);
cs = Math.cos(a);
cx[i] = Math.random() * doc_width + 1;
cy[i] = Math.random() * doc_height + 1;
x[i] = r[i] * sn + cx[i];
y[i] = cy[i];
}
//計(jì)算雪花位置,從新位置上出現(xiàn),看起來(lái)就像是新產(chǎn)生的一樣。
function makeSnow() {
r[i] = 1;
cx[i] = Math.random() * doc_width + 1;
cy[i] = 1;
x[i] = r[i] * sn + cx[i];
y[i] = r[i] * cs + cy[i];
}
//雪花下落的計(jì)算
function updateSnow() {
r[i] += s;
x[i] = r[i] * sn + cx[i];
y[i] = r[i] * cs + cy[i];
}
//在NS瀏覽器上處理雪片下落的主程序
function SnowdropNS() {
for (i = 0; i no; ++ i) { //依次處理每片雪花
updateSnow(); //下落
if ((x[i] = 1) || (x[i] = (doc_width - 20)) || (y[i] = (doc_height - 20))) { //如果超出屏幕范圍
makeSnow(); //則調(diào)整雪片到新位置上
doc_width = self.innerWidth; //更新頁(yè)面寬度數(shù)據(jù)
doc_height = self.innerHeight; //更新頁(yè)面高度數(shù)據(jù)
}
document.layers["dot"+i].top = y[i]; //改變層的Y坐標(biāo),應(yīng)用新的位置
document.layers["dot"+i].left = x[i]; //改變層的X坐標(biāo),應(yīng)用新的位置
}
setTimeout("SnowdropNS()", speed);
}
//在IE瀏覽器上處理雪片下落的主程序
function SnowdropIE() {
for (i = 0; i no; ++ i) { //依次處理每片雪花
updateSnow(); //下落
if ((x[i] = 1) || (x[i] = (doc_width - 20)) || (y[i] = (doc_height - 20))) { //如果超出屏幕范圍
makeSnow(); //則調(diào)整雪片到新位置上
doc_width = document.body.clientWidth; //更新頁(yè)面寬度數(shù)據(jù)
doc_height = document.body.clientHeight; //更新頁(yè)面高度數(shù)據(jù)
}
document.all["dot"+i].style.pixelTop = y[i]; //改變層的坐標(biāo),應(yīng)用新的位置
document.all["dot"+i].style.pixelLeft = x[i];
}
setTimeout("SnowdropIE()", speed); //準(zhǔn)備下一次下落過(guò)程。
}
if (ns4up) { //如果是NS
SnowdropNS(); //調(diào)用SnowdropNS使雪片下落
}
else
if (ie4up) { //如果是NS
SnowdropIE(); //調(diào)用SnowdropIE使雪片下落
}
--
/script
說(shuō)明:可以根據(jù)自己的需求根據(jù)說(shuō)明進(jìn)行相應(yīng)參數(shù)的修改
第一種。。你的雪花是圖片,那么你自己多做幾張旋轉(zhuǎn)的圖片,在每次飄落的時(shí)候,1秒后換取另外一張圖片?;蛘咦龀蒰if圖片。
第二種:你的是自己畫(huà)的雪花,那么你每秒要重新繪制你的雪花。
閃屏 是指面板刷新帶來(lái)的負(fù)面的效果。。