pbootcms网站模板|日韩1区2区|织梦模板||网站源码|日韩1区2区|jquery建站特效-html5模板网

HTML5夢幻之旅――炫麗的流星雨效果實現過程_h

HTML5夢幻之旅――炫麗的流星雨效果實現過程_html5教程技巧HTML5中文學習網,是中國最大的HTML5中文門戶,為廣大HTML5愛好者提供各種HTML5資料,包括HTML5網站、HTML5資訊、HTML5應用、HTML5游
點評:流星出現的時候,人們都喜歡對著它們許愿,因為傳說對著流星許下愿望后,愿望就能實現,最近出于興趣,制作一個拖尾效果,后來想到可以通過拖尾效果來實現一下流星雨的效果
徐家破鏡昏如霧。半面人間露。等閑相約是看燈。誰料人間天上、似流星。朱門簾影深深雨。憔悴新人舞。天涯海角賞新晴。惟有橋邊賣鏡、是閑行。
——宋·劉辰翁·《虞美人》

流星出現的時候,人們都喜歡對著它們許愿,因為傳說對著流星許下愿望后,愿望就能實現。不過流星很少見,至少我沒有見到過,因此從來沒有對著它許愿。最近出于興趣,制作一個拖尾效果,后來想到可以通過拖尾效果來實現一下流星雨的效果。因此今天就來實現一下,也好讓我等沒有看到過流星的童鞋長長見識。

先發幾個截圖吧:
 

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

復制代碼
代碼如下:

/**
* Smearing
* @param $object 添加拖尾的對象
*/
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人都知道。因此從第二行開始說起。
首先我們將這個類用base繼承自LSprite,如代碼清單2(至于base和LSprite是什么,可以到API文檔里去看看,或者看看我以前的文章)。

復制代碼
代碼如下:

base(self,LSprite,[]);

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

復制代碼
代碼如下:

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

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

復制代碼
代碼如下:

self.object = $object;

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

復制代碼
代碼如下:

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

代碼清單5
最后添加一個時間軸事件,方便添加拖尾。

復制代碼
代碼如下:

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

代碼清單6
到這里,Smearing構造器就寫完了,也解釋完了,看不懂的話可能是你不了解lufylegend,里面的addChild,LSprite都是lufylegend中封裝的。
我們在上面的代碼中已經加入了時間軸事件。為什么要加入呢?因為我不妨說一下拖尾的原理。拖尾其實就是不斷地將原對象克隆出來,然后放在現在所在的位置上,相當于不斷地向畫面上蓋章。當原對象移開時,我們克隆的對象并沒有移開,而原對象移開了,如果我們增加的對象有很多,那就會形成一條鏈接原對象的線。這時我們再遍歷一下這個線里的每個成員,通過緩動來改變當前對象的透明度。然后判斷該對象的透明度是否為0,如果是就移除,避免占太多空間。因此,我們添加時間軸事件用來不斷添加拖尾對象。
Smearing成員函數smeared起到這點作用,代碼如下:

復制代碼
代碼如下:

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
這些代碼按照我在上面所說的原理執行。可以看到我們在最后遍歷了拖尾層的成員,然后改變遍歷到的對象的透明度,并且在緩動結束后移除自身。其中的緩動類用的是lufylegend中封裝好了的LTweenLite,可以去API文檔里看看,寫得很詳細。
主要是上面兩行代碼,如代碼清單8:

復制代碼
代碼如下:

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

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

復制代碼
代碼如下:

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

復制代碼
代碼如下:

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

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

復制代碼
代碼如下:

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
演示效果圖如下:
 
測試連接:http://www.cnblogs.com/yorhom/articles/3237266.html
三,炫麗的流星雨效果
有了,Smearing這個類,我們的流星雨就簡單多了。首先把所有代碼展示一下:

復制代碼
代碼如下:

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);
//畫一個黑色矩形作為背景
back = new LGraphics();
back.drawRect(0,"",[0,0,LStage.width,LStage.height],true,"black");
backLayer.addChild(back);
//畫一個黃色矩形作為一顆流星
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;
//為每個流星添加一個拖尾
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
每行代碼都加入了注釋,理解起來一定很簡單了。如果實在是理解不到,可能是因為你沒有了解lufylegend罷了。可以參照API文檔學習一下。
最后是代碼打包,下載地址
本篇文章就到此結束了。文章如有什么地方寫得不妥,歡迎提出。另外,如果有任何不解的地方,可以在博客下方留言,我會盡我所能幫你解決。
支持就是最大的鼓勵!
【網站聲明】本站除付費源碼經過測試外,其他素材未做測試,不保證完整性,網站上部分源碼僅限學習交流,請勿用于商業用途。如損害你的權益請聯系客服QQ:2655101040 給予處理,謝謝支持。

相關文檔推薦

主站蜘蛛池模板: 耐酸碱泵-自吸耐酸碱泵型号「品牌厂家」立式耐酸碱泵价格-昆山国宝过滤机有限公司首页 | 液压扳手-高品质液压扳手供应商 - 液压扳手, 液压扳手供应商, 德国进口液压拉马 | 恒温恒湿试验箱_高低温试验箱_恒温恒湿箱-东莞市高天试验设备有限公司 | 检验科改造施工_DSA手术室净化_导管室装修_成都特殊科室建设厂家_医疗净化工程公司_四川华锐 | 大型果蔬切片机-水果冬瓜削皮机-洗菜机切菜机-肇庆市凤翔餐饮设备有限公司 | 招商帮-一站式网络营销服务|互联网整合营销|网络推广代运营|信息流推广|招商帮企业招商好帮手|搜索营销推广|短视视频营销推广 | 电子巡更系统-巡检管理系统-智能巡检【金万码】| 上海租奔驰_上海租商务车_上海租车网-矢昂汽车服务公司 | 车辆定位管理系统_汽车GPS系统_车载北斗系统 - 朗致物联 | 农业仪器网 - 中国自动化农业仪器信息交流平台| 精密钢管,冷拔精密无缝钢管,精密钢管厂,精密钢管制造厂家,精密钢管生产厂家,山东精密钢管厂家 | 无味渗透剂,泡沫抑尘剂,烷基糖苷-威海威能化工有限公司 | 电位器_轻触开关_USB连接器_广东精密龙电子科技有限公司 | 杭州代理记账费用-公司注销需要多久-公司变更监事_杭州福道财务管理咨询有限公司 | 合肥抖音SEO网站优化-网站建设-网络推广营销公司-百度爱采购-安徽企匠科技 | EDLC超级法拉电容器_LIC锂离子超级电容_超级电容模组_软包单体电容电池_轴向薄膜电力电容器_深圳佳名兴电容有限公司_JMX专注中高端品牌电容生产厂家 | 深圳货架厂家_金丽声精品货架_广东金丽声展示设备有限公司官网 | 钢托盘,铁托盘,钢制托盘,镀锌托盘,饲料托盘,钢托盘制造商-南京飞天金属13260753852 | 焊管生产线_焊管机组_轧辊模具_焊管设备_焊管设备厂家_石家庄翔昱机械 | 衢州装饰公司|装潢公司|办公楼装修|排屋装修|别墅装修-衢州佳盛装饰 | 美国PARKER齿轮泵,美国PARKER柱塞泵,美国PARKER叶片泵,美国PARKER电磁阀,美国PARKER比例阀-上海维特锐实业发展有限公司二部 | 温室大棚建设|水肥一体化|物联网系统 | sfp光模块,高速万兆光模块工厂-性价比更高的光纤模块制造商-武汉恒泰通 | 儿童语言障碍训练-武汉优佳加感统文化发展有限公司 | 超高频感应加热设备_高频感应电源厂家_CCD视觉检测设备_振动盘视觉检测设备_深圳雨滴科技-深圳市雨滴科技有限公司 | 葡萄酒灌装机-食用油灌装机-液体肥灌装设备厂家_青州惠联灌装机械 | 玉米深加工设备|玉米加工机械|玉米加工设备|玉米深加工机械-河南成立粮油机械有限公司 | 手持气象站_便携式气象站_农业气象站_负氧离子监测站-山东万象环境 | 交变/复合盐雾试验箱-高低温冲击试验箱_安奈设备产品供应杭州/江苏南京/安徽马鞍山合肥等全国各地 | 信阳网站建设专家-信阳时代网联-【信阳网站建设百度推广优质服务提供商】信阳网站建设|信阳网络公司|信阳网络营销推广 | 医学模型生产厂家-显微手术模拟训练器-仿真手术模拟训练系统-北京医教科技 | 电动卫生级调节阀,电动防爆球阀,电动软密封蝶阀,气动高压球阀,气动对夹蝶阀,气动V型调节球阀-上海川沪阀门有限公司 | 电子天平-华志电子天平厂家 | 三佳互联一站式网站建设服务|网站开发|网站设计|网站搭建服务商 赛默飞Thermo veritiproPCR仪|ProFlex3 x 32PCR系统|Countess3细胞计数仪|371|3111二氧化碳培养箱|Mirco17R|Mirco21R离心机|仟诺生物 | 变频器维修公司_plc维修_伺服驱动器维修_工控机维修 - 夫唯科技 变位机,焊接变位机,焊接变位器,小型变位机,小型焊接变位机-济南上弘机电设备有限公司 | 渣土车电机,太阳能跟踪器电机,蜗轮蜗杆减速电机厂家-淄博传强电机 | 展厅装修公司|企业展厅设计|展厅制作|展厅搭建—广州展厅装饰公司 | 皮带机_移动皮带机_大倾角皮带机_皮带机厂家 - 新乡市国盛机械设备有限公司 | PCB设计,PCB抄板,电路板打样,PCBA加工-深圳市宏力捷电子有限公司 | NMRV减速机|铝合金减速机|蜗轮蜗杆减速机|NMRV减速机厂家-东莞市台机减速机有限公司 | 自动售货机_无人售货机_专业的自动售货机运营商_免费投放售货机-广州富宏主官网 |