欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

HTML5夢(mèng)幻之旅——炫麗的流星雨效果實(shí)現(xiàn)過程

  發(fā)布時(shí)間:2013-08-06 15:57:54   作者:佚名   我要評(píng)論
流星出現(xiàn)的時(shí)候,人們都喜歡對(duì)著它們?cè)S愿,因?yàn)閭髡f對(duì)著流星許下愿望后,愿望就能實(shí)現(xiàn),最近出于興趣,制作一個(gè)拖尾效果,后來想到可以通過拖尾效果來實(shí)現(xiàn)一下流星雨的效果
徐家破鏡昏如霧。半面人間露。等閑相約是看燈。誰料人間天上、似流星。朱門簾影深深雨。憔悴新人舞。天涯海角賞新晴。惟有橋邊賣鏡、是閑行。
——宋·劉辰翁·《虞美人》

流星出現(xiàn)的時(shí)候,人們都喜歡對(duì)著它們?cè)S愿,因?yàn)閭髡f對(duì)著流星許下愿望后,愿望就能實(shí)現(xiàn)。不過流星很少見,至少我沒有見到過,因此從來沒有對(duì)著它許愿。最近出于興趣,制作一個(gè)拖尾效果,后來想到可以通過拖尾效果來實(shí)現(xiàn)一下流星雨的效果。因此今天就來實(shí)現(xiàn)一下,也好讓我等沒有看到過流星的童鞋長(zhǎng)長(zhǎng)見識(shí)。

先發(fā)幾個(gè)截圖吧:
 

測(cè)試連接:http://www.cnblogs.com/yorhom/articles/3237944.html
一,準(zhǔn)備工作
本次開發(fā)需要用到開源引擎lufylegend.js,引擎的下載地址&詳細(xì)信息如下
引擎官方網(wǎng)站:
http://lufylegend.com/lufylegend
引擎API網(wǎng)站:
http://lufylegend.com/lufylegend/api
二,拖尾效果
實(shí)現(xiàn)流星雨,要用到拖尾效果,但lufylegend中沒有添加拖尾的功能,所以只有自己寫了,其實(shí)實(shí)現(xiàn)起來也不難,就是lufy太懶了,沒有封裝而已(愿lufy不要看到這句話啊……)。今天我就幫他老人家來實(shí)現(xiàn)一下這個(gè)效果。
拖尾這個(gè)效果在游戲中很常見,比如人物移動(dòng)時(shí)的幻影,子彈等。因此我們把它封裝為一個(gè)Smearing類,這個(gè)類主要負(fù)責(zé)實(shí)現(xiàn)拖尾效果。代碼如下:

復(fù)制代碼
代碼如下:

/**
* Smearing
* @param $object 添加拖尾的對(duì)象
*/
function Smearing($object){
var self = this;
base(self,LSprite,[]);
self.x = 0;
self.y = 0;
self.mode = "";
self.smearingSprite = new LSprite();
self.addChild(self.smearingSprite);
self.object = $object;
self.originalSprite = new LSprite();
self.addChild(self.originalSprite);
self.originalSprite.addChild(self.object);
self.addEventListener(LEvent.ENTER_FRAME,self.smeared);
}

代碼清單1
接下來由我逐字逐句地解釋一番。
第一行代碼就不講解了,地球上的IT人都知道。因此從第二行開始說起。
首先我們將這個(gè)類用base繼承自LSprite,如代碼清單2(至于base和LSprite是什么,可以到API文檔里去看看,或者看看我以前的文章)。

復(fù)制代碼
代碼如下:

base(self,LSprite,[]);

代碼清單2
接下來,我們加入一個(gè)用來添加拖尾的層。如代碼清單3

復(fù)制代碼
代碼如下:

self.smearingSprite = new LSprite();
self.addChild(self.smearingSprite);

代碼清單3
然后我們保存一下添加拖尾效果的對(duì)象,這樣方便以后使用。如代碼清單4所示

復(fù)制代碼
代碼如下:

self.object = $object;

代碼清單4
然后添加放置要添加拖尾效果對(duì)象的層,并將它顯示出來。如代碼清單5

復(fù)制代碼
代碼如下:

self.originalSprite = new LSprite();
self.addChild(self.originalSprite);
self.originalSprite.addChild(self.object);

代碼清單5
最后添加一個(gè)時(shí)間軸事件,方便添加拖尾。

復(fù)制代碼
代碼如下:

self.addEventListener(LEvent.ENTER_FRAME,self.smeared);

代碼清單6
到這里,Smearing構(gòu)造器就寫完了,也解釋完了,看不懂的話可能是你不了解lufylegend,里面的addChild,LSprite都是lufylegend中封裝的。
我們?cè)谏厦娴拇a中已經(jīng)加入了時(shí)間軸事件。為什么要加入呢?因?yàn)槲也环琳f一下拖尾的原理。拖尾其實(shí)就是不斷地將原對(duì)象克隆出來,然后放在現(xiàn)在所在的位置上,相當(dāng)于不斷地向畫面上蓋章。當(dāng)原對(duì)象移開時(shí),我們克隆的對(duì)象并沒有移開,而原對(duì)象移開了,如果我們?cè)黾拥膶?duì)象有很多,那就會(huì)形成一條鏈接原對(duì)象的線。這時(shí)我們?cè)俦闅v一下這個(gè)線里的每個(gè)成員,通過緩動(dòng)來改變當(dāng)前對(duì)象的透明度。然后判斷該對(duì)象的透明度是否為0,如果是就移除,避免占太多空間。因此,我們添加時(shí)間軸事件用來不斷添加拖尾對(duì)象。
Smearing成員函數(shù)smeared起到這點(diǎn)作用,代碼如下:

復(fù)制代碼
代碼如下:

Smearing.prototype.smeared = function(self){
var smearingChild = new SmearingChild(self.originalSprite,self.object);
self.smearingSprite.addChild(smearingChild);
for(var key in self.smearingSprite.childList){
LTweenLite.to(self.smearingSprite.childList[key],0.5,{
alpha: 0,
onComplete:function(o){
self.smearingSprite.removeChild(o);
}
});
}
};

代碼清單7
這些代碼按照我在上面所說的原理執(zhí)行??梢钥吹轿覀?cè)谧詈蟊闅v了拖尾層的成員,然后改變遍歷到的對(duì)象的透明度,并且在緩動(dòng)結(jié)束后移除自身。其中的緩動(dòng)類用的是lufylegend中封裝好了的LTweenLite,可以去API文檔里看看,寫得很詳細(xì)。
主要是上面兩行代碼,如代碼清單8:

復(fù)制代碼
代碼如下:

var smearingChild = new SmearingChild(self.originalSprite,self.object);
self.smearingSprite.addChild(smearingChild);

代碼清單8
可以看到又用到了一個(gè)名為SmearingChild的類,這個(gè)便是傳說中的拖尾類。這個(gè)類不容忽視,雖然代碼很少,但是很重要,里面的代碼如代碼清單9:

復(fù)制代碼
代碼如下:

/**
* SmearingChild
* @param $parent 確定拖尾位置的對(duì)象
* @param $object 要添加拖尾效果的對(duì)象
*/
function SmearingChild($parent,$object){
var self = this;
base(self,LSprite,[]);
self.addChild($object);
self.x = $parent.x;
self.y = $parent.y;
self.alpha = 0.8;
}

代碼清單9
以上的類實(shí)例化時(shí)有兩個(gè)參數(shù),第一個(gè)用來確定這個(gè)拖尾位置的,第二個(gè)是原對(duì)象。首先來解釋一下“用來確定這個(gè)拖尾位置的”是神馬意思,其實(shí)我們對(duì)象的移動(dòng),不是讓整個(gè)Smearing對(duì)象移動(dòng),而是讓他里面的originalSprite對(duì)象移動(dòng),所以不干smearingSprite的事,為什么這樣設(shè)計(jì)呢?其實(shí)是有原因的(廢話,請(qǐng)忽略),原因所在就是,如果我們的拖尾的坐標(biāo)設(shè)置為整個(gè)Smearing對(duì)象的坐標(biāo)位置,那加到smearingSprite的對(duì)象也會(huì)跟著移動(dòng),拖尾就會(huì)錯(cuò)位,從而達(dá)不到效果。所以我采取了以上的辦法:不移動(dòng)本身,而是移動(dòng)originalSprite。因此,我們要把originalSprite的數(shù)據(jù)傳到SmearingChild中,因此就通過$parent來獲取。
講了一通,大伙應(yīng)該也明白了些。后面放出代碼,大家可以拿下去研究,或者在文章下方提出問題或者用新浪微博@Yorhom,還可以用郵箱,郵箱地址:wangyuehao1999@gmail.com。(聯(lián)系方式多多啊 (^o^))
Smearing這個(gè)類還差個(gè)功能,那就是讓對(duì)象緩緩移動(dòng),實(shí)現(xiàn)起來也很簡(jiǎn)單,加入to函數(shù):

復(fù)制代碼
代碼如下:

Smearing.prototype.to = function($duration,$vars){
var self = this;
$vars.onComplete = function(){
self.mode = "complete";
}
LTweenLite.to(self.originalSprite,$duration,$vars);
};

代碼清單10
第一個(gè)參數(shù)是移動(dòng)執(zhí)行的時(shí)間;第二個(gè)參數(shù)是執(zhí)行緩動(dòng)的數(shù)據(jù),和LTweenLite.to方法最后一個(gè)參數(shù)是一樣的,參照API文檔即可。不過值得注意的是,為了方便操作,我們?cè)谝苿?dòng)結(jié)束時(shí),將該對(duì)象的mode屬性改為“complete”。這樣做是為了讓大家根據(jù)mode屬性的值來決定是否作出其他的操作,比如移除該對(duì)象,或者往其他地方移動(dòng)。
Smearing這個(gè)類封裝好了,使用起來就簡(jiǎn)單了,如下:

復(fù)制代碼
代碼如下:

init(10,"mylegend",500,400,main);
var back;
function main(){
LStage.setDebug(true);
back = new LSprite();
back.graphics.drawRect(0,"",[0,0,50,50],true,"blue");
smearing = new Smearing(back,50);
smearing.to(2,{
x: 200,
y: 200
});
addChild(smearing);
}

代碼清單11
演示效果圖如下:
 
測(cè)試連接:http://www.cnblogs.com/yorhom/articles/3237266.html
三,炫麗的流星雨效果
有了,Smearing這個(gè)類,我們的流星雨就簡(jiǎn)單多了。首先把所有代碼展示一下:

復(fù)制代碼
代碼如下:

init(10,"mylegend",500,400,main);
var backLayer,meteorLayer;
var back,meteor;
var maxFrame = 40,indexFrame = 0;
function main(){
LStage.setDebug(true);
//加入底板層
backLayer = new LSprite();
addChild(backLayer);
//加入流星層
meteorLayer = new LSprite();
addChild(meteorLayer);
//畫一個(gè)黑色矩形作為背景
back = new LGraphics();
back.drawRect(0,"",[0,0,LStage.width,LStage.height],true,"black");
backLayer.addChild(back);
//畫一個(gè)黃色矩形作為一顆流星
meteor = new LSprite();
meteor.graphics.drawRect(0,"",[0,0,10,10],true,"yellow");
backLayer.addEventListener(LEvent.ENTER_FRAME,onframe);
}
function onframe(){
if(indexFrame > maxFrame){
indexFrame = 0;
//為每個(gè)流星添加一個(gè)拖尾
var smearing = new Smearing(meteor,50);
smearing.x = Math.floor(Math.random() * 250);
smearing.y = 0;
smearing.to(2,{
x: Math.floor(Math.random() * (500 - 480) + 480),
y: 400
});
meteorLayer.addChild(smearing);
}
for(var key in meteorLayer.childList){
if(meteorLayer.childList[key].mode == "complete"){
meteorLayer.removeChild(meteorLayer.childList[key]);
}
}
indexFrame ++;
}

代碼清單12
每行代碼都加入了注釋,理解起來一定很簡(jiǎn)單了。如果實(shí)在是理解不到,可能是因?yàn)槟銢]有了解lufylegend罷了。可以參照API文檔學(xué)習(xí)一下。
最后是代碼打包,下載地址
本篇文章就到此結(jié)束了。文章如有什么地方寫得不妥,歡迎提出。另外,如果有任何不解的地方,可以在博客下方留言,我會(huì)盡我所能幫你解決。
支持就是最大的鼓勵(lì)!

相關(guān)文章

  • HTML5播放實(shí)現(xiàn)rtmp流直播

    這篇文章主要介紹了HTML5播放實(shí)現(xiàn)rtmp流直播,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-06-16
  • html5用video標(biāo)簽流式加載的實(shí)現(xiàn)

    這篇文章主要介紹了html5用video標(biāo)簽流式加載的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)
    2020-05-20
  • 基于 HTML5 WebGL 實(shí)現(xiàn)的醫(yī)療物流系統(tǒng)

    物聯(lián)網(wǎng)( IoT ),簡(jiǎn)單的理解就是物體之間通過互聯(lián)網(wǎng)進(jìn)行鏈接。這篇文章給大家介紹基于 HTML5 WebGL 實(shí)現(xiàn)的醫(yī)療物流系統(tǒng),感興趣的朋友跟隨小編一起看看吧
    2019-10-08
  • Html5 實(shí)現(xiàn)微信分享及自定義內(nèi)容的流程

    這篇文章主要介紹了Html5 實(shí)現(xiàn)微信分享及自定義內(nèi)容的流程,非常不錯(cuò),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2019-08-20
  • HTML5 canvas 瀑布流文字效果的示例代碼

    這篇文章主要介紹了HTML5 canvas 瀑布流文字效果的示例代碼的相關(guān)資料,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2018-01-31
  • HTML5移動(dòng)端手機(jī)網(wǎng)站開發(fā)流程

    這篇文章主要為大家介紹了HTML5移動(dòng)端手機(jī)網(wǎng)站開發(fā)流程,想要進(jìn)行移動(dòng)端手機(jī)網(wǎng)站開發(fā)的朋友可以參考一下
    2016-04-25
  • HTML5實(shí)現(xiàn)的圖片無限加載的瀑布流效果另帶邊框圓角陰影

    一款網(wǎng)頁(yè)瀑布流效果,可以實(shí)現(xiàn)圖片的無限制加載。基于時(shí)下流行的HTML5技術(shù)編寫而成,除了實(shí)現(xiàn)瀑布流,還加入了CSS5的圖片修飾效果,比如圖片的圓角邊框、圖片陰影立體效果
    2014-03-07
  • HTML5 離線應(yīng)用之打造零請(qǐng)求、無流量網(wǎng)站的解決方法

    今天Web應(yīng)用程序已經(jīng)很復(fù)雜了,以現(xiàn)在的發(fā)展,會(huì)將越來越復(fù)雜,但他有一個(gè)致命缺點(diǎn),不能脫離internet鏈接,因此在HTML中新增了一API,它使用一個(gè)本地存儲(chǔ)機(jī)制很好地解決了
    2013-04-25
  • Html5之webcoekt播放JPEG圖片流

    這篇文章主要介紹了Html5之webcoekt播放JPEG圖片流,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)
    2020-09-22

最新評(píng)論