lufylegend基础知识1

这是官方的介绍:

lufylegend是一个HTML5开源引擎,它实现了利用仿ActionScript3.0的语法进行HTML5的开发, 包含了LSprite,LBitmapData,LBitmap,LLoader,LURLLoader,LTextField,LEvent等多个AS开发人员熟悉的类, 支持Google Chrome,Firefox,Opera,IE9,IOS,Android等多种热门环境。 利用lufylegend可以轻松的使用面向对象编程,并且可以配合Box2dWeb制作物理游戏, 另外它还内置了LTweenLite缓动类等非常实用的功能, 现在开始使用它吧,它可以让你更快的进入HTML5的世界!

 

从上面的文字可以看出啊,lufy大神的文字功底还是很屌的。其实说白了,lufylegend是一个兼容性极高,功能极多,使用方便的HTML5游戏引擎。

那么,在众多html5游戏引擎中,lufylegend优势何呢?

首先我觉得,最扯的一个优势就是:Lufylegend is made by Chinese。当然Cocos2d-html5也是made by Chinese啊~但是,lufylegend的API文档是中文的,Cocos2d-html5就不一样了。也许你非常懂英文,但是至少而言,你看中文还是比看英文习惯一些,不是吗?

第二个优点就是它效率十分高。在单核CPU上跑,FPS在15-23之间,在手机也就差不多是这个档次了。也许有朋友笑曰:“我X,FPS在15-23之间好意思说出口?”,但其实不然,你要清楚啊,html5和OpenGL等不是一个档次的,OpenGL发展N年了,而html5仍然被认为是一项新技术。以前,我也试着去学习Cocos2d-html5,但说真的,效率感觉比不上lufylegend。

第三个优点就是配置简单。有些引擎,东西一大堆,使用者根本无从下手。而使用lufylegend,只需要把lufylegend-xxx.min.js复制到项目下面即可。

其实说实话,只有你使用它以后,才能真正地感受到带来的方便。

 

当然,我还是再次把引擎的地址display出来:

官方网站:http://lufylegend.com/lufylegend

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

 

1,引擎原理

我们知道,游戏主要由事件和画面组成,在lufylegend的事件中,有鼠标事件(MOUSE_DOWN,MOUSE_UP,MOUSE_MOVE),键盘事件(KEY_DOWN,KEY_UP),时间轴事件(ENTER_FRAME),这些事件中,前两项so easy,好理解,但时间轴事件对于一些刚接触游戏开发的新生而言,有些摸不着头脑。其实时间轴事件相当于一个定时器,这个事件的监听者(listener,也就是事件回调函数)每隔一段时间就会触发一次。但这个东西有什么用呢?我们举个例子吧,假如我们做一个飞机大战的游戏,要让敌机缓缓地移动起来,如果我们直接将它们的x或者y设置为某值,那飞机就会在嗖地一声在瞬间之内移动到那里。这样很不“礼貌”,因为动作太大了~我们要做到缓缓地移动,这时候时间轴事件就该派上用处了,我们可以在监听函数中给飞机的x或者y增加某个值,这样的话,监听函数每被调用一次,就会将飞机移动一下,又因为每隔一段时间监听函数才被调用一次,所以说飞机就能够达到慢慢移动的效果,这样就”礼貌“多了,对吧?当然,要让飞机移动地更帅一点,那就要用到缓动类LTweenLite,什么是缓动类?好吧,我直观地告诉你,就是像jQuery淡入淡出那种逐渐变化从而实现某种效果的一个功能。这里有lufy对缓动类进行巧妙地利用,做出的一个超帅动画:HTML5超帅动画制作-LTweenLite的妙用

说完事件,我们再来说说画面。lufylegend中,但凡是加入到画面上的显示对象都是通过一个setInverval不停绘制的,这样做有什么必要呢?首先,是可以实现层次化,如果我们把所有对象放入一个数组中,通过遍历的方式获取每个对象并调用函数将其显示,那么第一个被加入的对象就会先被画在最下面,其余的依次画上,这样一来就实现了层次化效果。其次,还有个好处就是可以通过直接更改对象的属性从而在下次重绘时表现出来,比如说我们加入一个图片对象(对象名字为img),这时我们要改变它的显示方式为不显示(visible属性改为false),那么直接把img.visible改为false即可,那在下次重绘时就控制它不显示。另外,在上面提到的时间轴事件触发的速度也是由重画速度决定的——每画一次就调用一次。

在lufylegend中,但凡是可显示的对象,大都继承自LDisplayObject。这个类有个ll_show方法,用于在循环渲染时变幻画布,绘制该显示的东西。

 

2,利用引擎初始化游戏

在引擎中,要初始化游戏需要用到引擎内部的init函数,使用方法举例如下:

 

[javascript] view plain copy print ? 在CODE上查看代码片 派生到我的代码片
  1. init(50,"mylegend",800,480,main)  
init(50,"mylegend",800,480,main)

这个函数的参数是:

 

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

speed:游戏速度设定

divid:传入一个div的id,库件进行初始化的时候,会自动将canvas加入到此div内部

width:游戏界面宽

height:游戏界面高

completeFunc:游戏初始化后,调用此函数

在使用lufylegend时,不用在html文件中写什么<canvas>标签,不过要写一个div,如下:

 

[javascript] view plain copy print ? 在CODE上查看代码片 派生到我的代码片
  1. <!DOCTYPE html>  
  2. <html>  
  3. <head>  
  4. <meta charset="UTF-8">  
  5. <title>demo</title>  
  6. </head>  
  7. <body>  
  8. <div id="mylegend">loading……</div>  
  9. <script type="text/javascript" src="../lufylegend-x.x.x.min.js"></script>   
  10. <script>  
  11. init(50,"mylegend",800,480,main);  
  12. function main(){  
  13.     alert("感谢您使用lufylegend库件");  
  14. }  
  15. </script>  
  16. </body>  
  17. </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的参数speed或许有的朋友不理解什么是游戏速度,其实就是我在原理中介绍到的setInterval的速度,这个速度控制的是重绘速度和时间轴触发速度,如果设得超大,你的画面会很卡,不管你是什么双核CPU还是什么四核CPU。如果设得超小,比如说1-10,那有些性能差的电脑显示起来就会有些差,一卡一卡的~所以我一般设置为30-50,这之间的数应该都挺合适的。

 

 

3,引擎基本功能及原理

 

1,LGlobal(LStage、LSystem)静态类

这个类掌管游戏中许多全局的设置,比如说更改游戏速度,获取游戏界面高度、宽度,canvas标签,canvas标签的getContext("2d"),和当前操作系统等,可以到API文档中看个究竟。

在LGlobal中,有个childList属性,这个属性在最新的几个版本里面主要存放LGlobal.stage(最底层,一个LSprite对象。LSprite是什么?下文会慢慢介绍的),LTweenLite(缓动类),LSound.Container(音频容器,貌似里面有用于判断音频是否结束的函数)。引擎循环渲染便是从这个地方开始的。引擎中通过遍历LGlobal.childList获取这几个对象,然后调用每个对象的ll_show方法来实现循环执行每个对象应该执行的命令,例如LGlobal.stage就应该执行LSprite该做的向下循环子对象,LTweenLite就应该调用缓动函数来改变缓动数据等。

 

2,全屏设置

html5最大的优势就是跨平台,所以游戏要能在手机上运行最好,但是能运行不能就完了,还要能达到全屏。以前lufylegend的全屏有点问题,不过最近改好了,不仅能手机全屏,PC机也OK,还提供了三种全屏模式:

LStageScaleMode.EXACT_FIT:[静态] 指定整个应用程序在指定区域中可见,但不尝试保持原始高宽比。
LStageScaleMode.SHOW_ALL:[静态] 指定整个应用程序在指定区域中可见,且不会发生扭曲,同时保持应用程序的原始高宽比。
LStageScaleMode.NO_SCALE:[静态] 指定应用程序的大小是固定的,因此,即使在更改播放器窗口大小时,它仍然保持不变。
※设置完舞台的缩放模式之后,调用LSystem.screen(LStage.FULL_SCREEN);就可以实现全屏。

原理很简单,就是设置canvas标签的style.width和style.height来实现GPU缩放。

 

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

在lufylegend中要加入显示对象到银幕上,需要使用addChild,如果直接调用这个函数,就是把对象加入最底层,当然LSprite也有addChild,是把对象添加到LSprite上,从而实现层次化效果。

removeChild是一样的,只不过是把对象删除而已~

addChild和removeChild等同于LGlobal.stage.addChild和LGlobal.stage.removeChild。原理为把参数所指定的对象从LSprite的childList里面删除掉。

 

4,LLoadManage加载文件

主要用于加载游戏中的文件,如图片,音频,js文件,其他文件(需要用到服务器),用法可查API文档。

原理:通过判断文件不同的类型从而分别调用LLoader(读取图片),LURLLoader(读取文本文件,包括js文件),LSound(读取音频)。当然你可以直接用上述的几个类读取数据,但是咱们的LLoadManage胃口更大,可以批量读取不同类型的文件,使用起来还会更方便,因为其中还提供了进度条的显示。

 

5,图片类LBitmap,LBitmapData

这个两个类主要配合显示图片,不过显示之前需要加载图片,方法如下:

 

[javascript] view plain copy print ? 在CODE上查看代码片 派生到我的代码片
  1. var loadData = [  
  2. {name:"yorhom",path:"./images/yorhom.png"}  
  3. ];  
  4. var datalist=[];   
  5. function main(){   
  6.     loadingLayer = new LoadingSample1();   
  7.     addChild(loadingLayer);   
  8.     LLoadManage.load(   
  9.         imgData,   
  10.         function(progress){   
  11.             loadingLayer.setProgress(progress);   
  12.         },   
  13.         gameInit   
  14.     );   
  15. }   
  16. function gameInit(result){   
  17.     datalist = result;   
  18.     removeChild(loadingLayer);   
  19.     loadingLayer = null;   
  20.       
  21.     var bitmapData = new LBitmapData(datalist["yorhom"]);  
  22.     var bitmap = new LBitmap(bitmapData);  
  23.     addChild(bitmap);  
  24. }  
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);
}

 

通过这俩的名字可以看出来,一个是负责提供数据,一个负责按数据要求显示,类似于教研员和考生。LBitmap是LDisplayObject的子类,在ll_show中会调用到绘制图像的函数。同时也会进行相应的画布变幻。

 

6,LSprite层次化效果

 

LSprite的定义是:LSprite 类是基本显示列表构造块,一个可显示图形并且也可包含子项的显示列表节点。这个有点复杂,但其实说白了就是一个Layer层。我们在前面说到过,加入越后的对象会显示在最顶部,但是我要让后加的对象显示在先加的对象下方,就要用到LSprite分层显示了。LSprite也有addChild和removeChild方法,用于添加对象。此外,LSprite还有addEventListener函数,用于给对象加入事件。具体的一些功能可以到官方API去看看。

LSprite也有个childList属性,装有其子成员,在ll_show中,LSprite执行画布变幻和循环自己的childList,然后调用循环到的子对象的ll_show方法。

 

7,LTextField文字显示

这个类如LBitmap一般,需要用addChild加入到界面中。这个类的属性很多,不过用起来挺不错的,大家可以到API中去看一看,使用举例如下:

 

[javascript] view plain copy print ? 在CODE上查看代码片 派生到我的代码片
  1. init(20,"mylegend",500,400,main);   
  2. var backLayer,title;   
  3. function main(){   
  4.     backLayer = new LSprite();   
  5.     addChild(backLayer);   
  6.     title = new LTextField();   
  7.     title.size = 30;   
  8.     title.color = "#ff0000";   
  9.     title.text = "文字显示测试";   
  10.     backLayer.addChild(title);   
  11. }  
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); 
}

这个类嘛和LBitmap执行的命令差不多,画图的命令改为画文字的命令即可。

转载于:https://www.cnblogs.com/zgqys1980/p/4390367.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
青瓷引擎是一套开源免费的JavaScript游戏引擎类库,其基于开源免费的Phaser游戏引擎,并提供了一套完全基于浏览器的跨平台集成式HTML5游戏编辑器。 采用青瓷引擎,开发HTML5游戏和传统Web网页开发一样,使用任何你喜欢的编辑器,使用任何你喜欢的浏览器,利用JavaScript语言和所有先进的Web开发工具,让青瓷引擎处理底层技术的复杂性,你只需要关注最重要的事情:做游戏! 青瓷引擎技术堆栈 青瓷引擎由三部分组成:QICI Core、QICI Widget和QICI Editor QICI Core:一套JavaScript游戏引擎类库(qc-core.js),基于开源免费的Phaser游戏引擎。 QICI Widget:一套JavaScript图形组件库(qc-widget.js),为编辑器提供丰富强大的通用组件。 QICI Editor:一套基于浏览器的跨平台集成式游戏编辑器,包含基于Node.JS的后台服务。 QICI Core可用于编程方式开发HTML5游戏,无需QICI Editor的支持。但对于界面布局稍微有点复杂度的游戏,如果没有QICI Editor这样所见即所得的可视化开发工具,很难进行快速开发和维护,采用QICI Editor美术和策划甚至都可以参与帮助游戏界面的构建。QICI Widget主要内部使用,为QICI Editor提供基础通用组件支持。 QICI Core是基于JavaScript的游戏类库,QICI Widget是基于JavaScript的图形组件库,QICI Editor采用Node.JS进行资源文件IO处理,所以可以说青瓷引擎是全栈式的JavaScript游戏引擎。青瓷引擎特点 游戏无需浏览器安装额外插件,适应性更广,更利于传播 重新定义了HTML5游戏的开发工作流,开发、调试尽在浏览器内 面向组件式编程,支持组件热拔插,方便扩展维护 强大的可视化编辑功能,让设计不再是凭空想象 先进的UI界面布局规则,使得屏幕适配更加简单 为国内手机浏览器进行了优化,减少非标准适配的烦恼 高效的渲染底层,自适应WebGl和Canvas两种模式 丰富的底层核心功能,涵盖绝大部分游戏开发需求 不断丰富的插件库,让游戏开发更加便捷、简单青瓷引擎功能 基于浏览器的编辑器 所见即所得的实时调试功能 网络资源管理,支持预加载、动态加载 时间调度系统,可控制帧率,游戏速度等 自适应Web Audio和Audio Tag,适配性更高的声音管理功能 提供了表格、拉条、滚动视图等丰富的界面控件 提供了游戏与HTML元素混合处理模式 提供基于Rect Tranform的UI布局套件 支持WebFont和BitmapFont等字体系统 优化文字对视网膜设备的适配 整合图集打包,帧动画编辑功能 高性能骨骼动画渲染 支持多种Filter着色器渲染 支持Excel数据导入功能 支持Tilemap的地图导入,并优化刷新性能 强大的可视化Tween曲线动画编辑功能 编辑器菜单和属性面板支持可自定义扩展功能 可扩展插件功能,提供物理、锁屏、微信接口和服务端通讯等内置插件 基于浏览器的编辑器,无需安装任何插件,开发、调试尽在浏览器内。 iPad iPhone 部分游戏示例(点击图片可体验游戏)《神奇的六边形》(《神奇的六边形》完整教程) 《蛇精病》    《跳跃的方块》 (《跳跃的方块》完整教程)        《2187》   Examples A wide range of source code examples for you to explore. Download all in one zip file.            标签:游戏引擎
随着html5 相关技术的兴起,因其跨平台的特性,和标准的日益完善。html5相关技术越来越多的被应用到前沿app的开发中,尤其是html5 小游戏的开发。 Laro 是一个基于html5 canvas的用于平面2d或者2.5d游戏制作的轻量级游戏引擎。 因为当前canvas作为画布形态的dom元素,并提供了大量关于矢量图以及texture绘制的api,但是由于其本身提供的api太过于底层,在类似游戏这一类交互性,逻辑性较为复杂的app时。需要开发者编写大量底层的api来实现本身的业务逻辑。 Laro出现的目的是为了简化使用canvas制作游戏时的api调用。同时提供了一套“有限状态机”的开发模式,这种模式在对于游戏这一类的典型的“事件驱动”的模型的开发上。能够很好的做到模块间的低耦合,利于开发者梳理整个开发逻辑。 Laro 游戏引擎目前已经完成了游戏开发中所需要的模块和api的封装,并有一些实际的Demo和TestCase供使用者参考。而且随后会结合这个引擎整理出一套用于html5 小游戏开发的可视化编辑工具。 旨在帮助开发者更快更容易的搭建一款小游戏为目的。 目前已经开源到github (https://github.com/AlloyTeam/Laro) 我们团队希望通过Laro的不断完善,能够帮助更多的html5 小游戏开发者以更快的速度,更优的质量完成 html5小游戏 产业化的开发。 Version Log 0.1 - 基础模块搭建 0.2 - 融入jcanvas,配合鼠标事件处理 0.3 - 加强状态机模块 查看以下demo最好使用chrome  : ) http://hongru.github.com/proj/laro/examples/emberwind/ http://hongru.github.com/proj/laro/examples/typeshot/index.html http://hongru.github.com/proj/laro/examples/jxhome/ http://heroes.github.com/world-of-heroes/development/
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值