日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 >

lufylegend基础知识1

發(fā)布時(shí)間:2025/7/14 33 豆豆
生活随笔 收集整理的這篇文章主要介紹了 lufylegend基础知识1 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

這是官方的介紹:

lufylegend是一個(gè)HTML5開源引擎,它實(shí)現(xiàn)了利用仿ActionScript3.0的語法進(jìn)行HTML5的開發(fā), 包含了LSprite,LBitmapData,LBitmap,LLoader,LURLLoader,LTextField,LEvent等多個(gè)AS開發(fā)人員熟悉的類, 支持Google Chrome,Firefox,Opera,IE9,IOS,Android等多種熱門環(huán)境。 利用lufylegend可以輕松的使用面向?qū)ο缶幊?#xff0c;并且可以配合Box2dWeb制作物理游戲, 另外它還內(nèi)置了LTweenLite緩動類等非常實(shí)用的功能, 現(xiàn)在開始使用它吧,它可以讓你更快的進(jìn)入HTML5的世界!

?

從上面的文字可以看出啊,lufy大神的文字功底還是很屌的。其實(shí)說白了,lufylegend是一個(gè)兼容性極高,功能極多,使用方便的HTML5游戲引擎。

那么,在眾多html5游戲引擎中,lufylegend優(yōu)勢何呢?

首先我覺得,最扯的一個(gè)優(yōu)勢就是:Lufylegend is made by Chinese。當(dāng)然Cocos2d-html5也是made by Chinese啊~但是,lufylegend的API文檔是中文的,Cocos2d-html5就不一樣了。也許你非常懂英文,但是至少而言,你看中文還是比看英文習(xí)慣一些,不是嗎?

第二個(gè)優(yōu)點(diǎn)就是它效率十分高。在單核CPU上跑,FPS在15-23之間,在手機(jī)也就差不多是這個(gè)檔次了。也許有朋友笑曰:“我X,FPS在15-23之間好意思說出口?”,但其實(shí)不然,你要清楚啊,html5和OpenGL等不是一個(gè)檔次的,OpenGL發(fā)展N年了,而html5仍然被認(rèn)為是一項(xiàng)新技術(shù)。以前,我也試著去學(xué)習(xí)Cocos2d-html5,但說真的,效率感覺比不上lufylegend。

第三個(gè)優(yōu)點(diǎn)就是配置簡單。有些引擎,東西一大堆,使用者根本無從下手。而使用lufylegend,只需要把lufylegend-xxx.min.js復(fù)制到項(xiàng)目下面即可。

其實(shí)說實(shí)話,只有你使用它以后,才能真正地感受到帶來的方便。

?

當(dāng)然,我還是再次把引擎的地址display出來:

官方網(wǎng)站:http://lufylegend.com/lufylegend

API文檔:http://lufylegend.com/lufylegend/api

?

1,引擎原理

我們知道,游戲主要由事件和畫面組成,在lufylegend的事件中,有鼠標(biāo)事件(MOUSE_DOWN,MOUSE_UP,MOUSE_MOVE),鍵盤事件(KEY_DOWN,KEY_UP),時(shí)間軸事件(ENTER_FRAME),這些事件中,前兩項(xiàng)so easy,好理解,但時(shí)間軸事件對于一些剛接觸游戲開發(fā)的新生而言,有些摸不著頭腦。其實(shí)時(shí)間軸事件相當(dāng)于一個(gè)定時(shí)器,這個(gè)事件的監(jiān)聽者(listener,也就是事件回調(diào)函數(shù))每隔一段時(shí)間就會觸發(fā)一次。但這個(gè)東西有什么用呢?我們舉個(gè)例子吧,假如我們做一個(gè)飛機(jī)大戰(zhàn)的游戲,要讓敵機(jī)緩緩地移動起來,如果我們直接將它們的x或者y設(shè)置為某值,那飛機(jī)就會在嗖地一聲在瞬間之內(nèi)移動到那里。這樣很不“禮貌”,因?yàn)閯幼魈罅藒我們要做到緩緩地移動,這時(shí)候時(shí)間軸事件就該派上用處了,我們可以在監(jiān)聽函數(shù)中給飛機(jī)的x或者y增加某個(gè)值,這樣的話,監(jiān)聽函數(shù)每被調(diào)用一次,就會將飛機(jī)移動一下,又因?yàn)槊扛粢欢螘r(shí)間監(jiān)聽函數(shù)才被調(diào)用一次,所以說飛機(jī)就能夠達(dá)到慢慢移動的效果,這樣就”禮貌“多了,對吧?當(dāng)然,要讓飛機(jī)移動地更帥一點(diǎn),那就要用到緩動類LTweenLite,什么是緩動類?好吧,我直觀地告訴你,就是像jQuery淡入淡出那種逐漸變化從而實(shí)現(xiàn)某種效果的一個(gè)功能。這里有l(wèi)ufy對緩動類進(jìn)行巧妙地利用,做出的一個(gè)超帥動畫:HTML5超帥動畫制作-LTweenLite的妙用

說完事件,我們再來說說畫面。lufylegend中,但凡是加入到畫面上的顯示對象都是通過一個(gè)setInverval不停繪制的,這樣做有什么必要呢?首先,是可以實(shí)現(xiàn)層次化,如果我們把所有對象放入一個(gè)數(shù)組中,通過遍歷的方式獲取每個(gè)對象并調(diào)用函數(shù)將其顯示,那么第一個(gè)被加入的對象就會先被畫在最下面,其余的依次畫上,這樣一來就實(shí)現(xiàn)了層次化效果。其次,還有個(gè)好處就是可以通過直接更改對象的屬性從而在下次重繪時(shí)表現(xiàn)出來,比如說我們加入一個(gè)圖片對象(對象名字為img),這時(shí)我們要改變它的顯示方式為不顯示(visible屬性改為false),那么直接把img.visible改為false即可,那在下次重繪時(shí)就控制它不顯示。另外,在上面提到的時(shí)間軸事件觸發(fā)的速度也是由重畫速度決定的——每畫一次就調(diào)用一次。

在lufylegend中,但凡是可顯示的對象,大都繼承自LDisplayObject。這個(gè)類有個(gè)ll_show方法,用于在循環(huán)渲染時(shí)變幻畫布,繪制該顯示的東西。

?

2,利用引擎初始化游戲

在引擎中,要初始化游戲需要用到引擎內(nèi)部的init函數(shù),使用方法舉例如下:

?

[javascript] view plaincopyprint?
  • init(50,"mylegend",800,480,main)??
  • init(50,"mylegend",800,480,main)

    這個(gè)函數(shù)的參數(shù)是:

    ?

    init(speed,divid,width,height,completeFunc);

    speed:游戲速度設(shè)定

    divid:傳入一個(gè)div的id,庫件進(jìn)行初始化的時(shí)候,會自動將canvas加入到此div內(nèi)部

    width:游戲界面寬

    height:游戲界面高

    completeFunc:游戲初始化后,調(diào)用此函數(shù)

    在使用lufylegend時(shí),不用在html文件中寫什么<canvas>標(biāo)簽,不過要寫一個(gè)div,如下:

    ?

    [javascript] view plaincopyprint?
  • <!DOCTYPE?html>??
  • <html>??
  • <head>??
  • <meta?charset="UTF-8">??
  • <title>demo</title>??
  • </head>??
  • <body>??
  • <div?id="mylegend">loading……</div>??
  • <script?type="text/javascript"?src="../lufylegend-x.x.x.min.js"></script>???
  • <script>??
  • init(50,"mylegend",800,480,main);??
  • function?main(){??
  • ????alert("感謝您使用lufylegend庫件");??
  • }??
  • </script>??
  • </body>??
  • </html>??
  • <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>demo</title> </head> <body> <div id="mylegend">loading……</div> <script type="text/javascript" src="../lufylegend-x.x.x.min.js"></script> <script> init(50,"mylegend",800,480,main); function main(){alert("感謝您使用lufylegend庫件"); } </script> </body> </html>

    還是很簡單的,不是嗎?不過值得一提的是,init的參數(shù)speed或許有的朋友不理解什么是游戲速度,其實(shí)就是我在原理中介紹到的setInterval的速度,這個(gè)速度控制的是重繪速度和時(shí)間軸觸發(fā)速度,如果設(shè)得超大,你的畫面會很卡,不管你是什么雙核CPU還是什么四核CPU。如果設(shè)得超小,比如說1-10,那有些性能差的電腦顯示起來就會有些差,一卡一卡的~所以我一般設(shè)置為30-50,這之間的數(shù)應(yīng)該都挺合適的。

    ?

    ?

    3,引擎基本功能及原理

    ?

    1,LGlobal(LStage、LSystem)靜態(tài)類

    這個(gè)類掌管游戲中許多全局的設(shè)置,比如說更改游戲速度,獲取游戲界面高度、寬度,canvas標(biāo)簽,canvas標(biāo)簽的getContext("2d"),和當(dāng)前操作系統(tǒng)等,可以到API文檔中看個(gè)究竟。

    在LGlobal中,有個(gè)childList屬性,這個(gè)屬性在最新的幾個(gè)版本里面主要存放LGlobal.stage(最底層,一個(gè)LSprite對象。LSprite是什么?下文會慢慢介紹的),LTweenLite(緩動類),LSound.Container(音頻容器,貌似里面有用于判斷音頻是否結(jié)束的函數(shù))。引擎循環(huán)渲染便是從這個(gè)地方開始的。引擎中通過遍歷LGlobal.childList獲取這幾個(gè)對象,然后調(diào)用每個(gè)對象的ll_show方法來實(shí)現(xiàn)循環(huán)執(zhí)行每個(gè)對象應(yīng)該執(zhí)行的命令,例如LGlobal.stage就應(yīng)該執(zhí)行LSprite該做的向下循環(huán)子對象,LTweenLite就應(yīng)該調(diào)用緩動函數(shù)來改變緩動數(shù)據(jù)等。

    ?

    2,全屏設(shè)置

    html5最大的優(yōu)勢就是跨平臺,所以游戲要能在手機(jī)上運(yùn)行最好,但是能運(yùn)行不能就完了,還要能達(dá)到全屏。以前l(fā)ufylegend的全屏有點(diǎn)問題,不過最近改好了,不僅能手機(jī)全屏,PC機(jī)也OK,還提供了三種全屏模式:

    LStageScaleMode.EXACT_FIT:[靜態(tài)] 指定整個(gè)應(yīng)用程序在指定區(qū)域中可見,但不嘗試保持原始高寬比。
    LStageScaleMode.SHOW_ALL:[靜態(tài)] 指定整個(gè)應(yīng)用程序在指定區(qū)域中可見,且不會發(fā)生扭曲,同時(shí)保持應(yīng)用程序的原始高寬比。
    LStageScaleMode.NO_SCALE:[靜態(tài)] 指定應(yīng)用程序的大小是固定的,因此,即使在更改播放器窗口大小時(shí),它仍然保持不變。
    ※設(shè)置完舞臺的縮放模式之后,調(diào)用LSystem.screen(LStage.FULL_SCREEN);就可以實(shí)現(xiàn)全屏。

    原理很簡單,就是設(shè)置canvas標(biāo)簽的style.width和style.height來實(shí)現(xiàn)GPU縮放。

    ?

    3,加入對象/移除對象:addChild,removeChild

    在lufylegend中要加入顯示對象到銀幕上,需要使用addChild,如果直接調(diào)用這個(gè)函數(shù),就是把對象加入最底層,當(dāng)然LSprite也有addChild,是把對象添加到LSprite上,從而實(shí)現(xiàn)層次化效果。

    removeChild是一樣的,只不過是把對象刪除而已~

    addChild和removeChild等同于LGlobal.stage.addChild和LGlobal.stage.removeChild。原理為把參數(shù)所指定的對象從LSprite的childList里面刪除掉。

    ?

    4,LLoadManage加載文件

    主要用于加載游戲中的文件,如圖片,音頻,js文件,其他文件(需要用到服務(wù)器),用法可查API文檔。

    原理:通過判斷文件不同的類型從而分別調(diào)用LLoader(讀取圖片),LURLLoader(讀取文本文件,包括js文件),LSound(讀取音頻)。當(dāng)然你可以直接用上述的幾個(gè)類讀取數(shù)據(jù),但是咱們的LLoadManage胃口更大,可以批量讀取不同類型的文件,使用起來還會更方便,因?yàn)槠渲羞€提供了進(jìn)度條的顯示。

    ?

    5,圖片類LBitmap,LBitmapData

    這個(gè)兩個(gè)類主要配合顯示圖片,不過顯示之前需要加載圖片,方法如下:

    ?

    [javascript] view plaincopyprint?
  • var?loadData?=?[??
  • {name:"yorhom",path:"./images/yorhom.png"}??
  • ];??
  • var?datalist=[];???
  • function?main(){???
  • ????loadingLayer?=?new?LoadingSample1();???
  • ????addChild(loadingLayer);???
  • ????LLoadManage.load(???
  • ????????imgData,???
  • ????????function(progress){???
  • ????????????loadingLayer.setProgress(progress);???
  • ????????},???
  • ????????gameInit???
  • ????);???
  • }???
  • function?gameInit(result){???
  • ????datalist?=?result;???
  • ????removeChild(loadingLayer);???
  • ????loadingLayer?=?null;???
  • ??????
  • ????var?bitmapData?=?new?LBitmapData(datalist["yorhom"]);??
  • ????var?bitmap?=?new?LBitmap(bitmapData);??
  • ????addChild(bitmap);??
  • }??
  • var loadData = [ {name:"yorhom",path:"./images/yorhom.png"} ]; var datalist=[]; function main(){ loadingLayer = new LoadingSample1(); addChild(loadingLayer); LLoadManage.load( imgData, function(progress){ loadingLayer.setProgress(progress); }, gameInit ); } function gameInit(result){ datalist = result; removeChild(loadingLayer); loadingLayer = null; var bitmapData = new LBitmapData(datalist["yorhom"]);var bitmap = new LBitmap(bitmapData);addChild(bitmap); }

    ?

    通過這倆的名字可以看出來,一個(gè)是負(fù)責(zé)提供數(shù)據(jù),一個(gè)負(fù)責(zé)按數(shù)據(jù)要求顯示,類似于教研員和考生。LBitmap是LDisplayObject的子類,在ll_show中會調(diào)用到繪制圖像的函數(shù)。同時(shí)也會進(jìn)行相應(yīng)的畫布變幻。

    ?

    6,LSprite層次化效果

    ?

    LSprite的定義是:LSprite 類是基本顯示列表構(gòu)造塊,一個(gè)可顯示圖形并且也可包含子項(xiàng)的顯示列表節(jié)點(diǎn)。這個(gè)有點(diǎn)復(fù)雜,但其實(shí)說白了就是一個(gè)Layer層。我們在前面說到過,加入越后的對象會顯示在最頂部,但是我要讓后加的對象顯示在先加的對象下方,就要用到LSprite分層顯示了。LSprite也有addChild和removeChild方法,用于添加對象。此外,LSprite還有addEventListener函數(shù),用于給對象加入事件。具體的一些功能可以到官方API去看看。

    LSprite也有個(gè)childList屬性,裝有其子成員,在ll_show中,LSprite執(zhí)行畫布變幻和循環(huán)自己的childList,然后調(diào)用循環(huán)到的子對象的ll_show方法。

    ?

    7,LTextField文字顯示

    這個(gè)類如LBitmap一般,需要用addChild加入到界面中。這個(gè)類的屬性很多,不過用起來挺不錯(cuò)的,大家可以到API中去看一看,使用舉例如下:

    ?

    [javascript] view plaincopyprint?
  • init(20,"mylegend",500,400,main);???
  • var?backLayer,title;???
  • function?main(){???
  • ????backLayer?=?new?LSprite();???
  • ????addChild(backLayer);???
  • ????title?=?new?LTextField();???
  • ????title.size?=?30;???
  • ????title.color?=?"#ff0000";???
  • ????title.text?=?"文字顯示測試";???
  • ????backLayer.addChild(title);???
  • }??
  • init(20,"mylegend",500,400,main); var backLayer,title; function main(){ backLayer = new LSprite(); addChild(backLayer); title = new LTextField(); title.size = 30; title.color = "#ff0000"; title.text = "文字顯示測試"; backLayer.addChild(title); }

    這個(gè)類嘛和LBitmap執(zhí)行的命令差不多,畫圖的命令改為畫文字的命令即可。

    總結(jié)

    以上是生活随笔為你收集整理的lufylegend基础知识1的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。