lufy's legend

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 8809|回复: 4
打印 上一主题 下一主题

LSprite中mask用法

[复制链接]

46

主题

3

好友

1866

积分

偏将军

Rank: 4

跳转到指定楼层
楼主
发表于 2013-4-29 15:54:13 |只看该作者 |倒序浏览
我看见LSprite中有mask属性,出于好奇,想了解有什么用,以及怎么用。
了解后说不定有什么大用处呢。
回复

使用道具 举报

37

主题

8

好友

9312

积分

诸侯王

Rank: 15Rank: 15Rank: 15Rank: 15Rank: 15

沙发
发表于 2013-4-29 20:16:41 |只看该作者
这个是遮罩,从AS3移植过来的,但是还有待完善,所以没有公布详细信息。
它的效果就是把mask所绘制的区域显示出来。
比如下面这个例子,
  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4.         <meta charset="utf-8" />
  5.         <title>遮罩</title>
  6.         <script type="text/javascript" src="http://lufylegend.com/js/lufylegend-1.7.3.min.js"></script>
  7. </head>
  8. <body>
  9. <div id="legend"></div>
  10. <script>
  11. init(30,"legend",480,800,main);
  12. var maskLayer,backLayer;
  13. var bitmapData;
  14. var imgData = [
  15.         {name:"face",path:"http://lufylegend.com/images/html5/lufylegend/ps/face.jpg"}
  16. ];
  17. var imglist;
  18. function main(){
  19.         LLoadManage.load(imgData,null,gameInit);
  20. }
  21. function gameInit(result){
  22.         imglist = result;
  23.         bitmapData = new LBitmapData(imglist["face"]);
  24.        
  25.         backLayer = new LSprite();
  26.         addChild(backLayer);
  27.         var bitmap = new LBitmap(bitmapData);
  28.         backLayer.addChild(bitmap);

  29.         maskLayer = new LSprite();
  30.         maskLayer.graphics.drawArc(1,"#000000",[100,100,50,0,2*Math.PI],true,"#000000");
  31.         backLayer.mask = maskLayer;
  32. }       
  33. </script>
  34. </body>
  35. </html>
复制代码
face.jpg就是我的头像那张图片,是一张很大的图片,但是maskLayer是一个圆,将这个圆作为backLayer的遮罩后,效果就变成了下面这样

测试连接
http://lufylegend.com/demo/test/3.html
不回答与技术和引擎不相关的问题
回复

使用道具 举报

46

主题

3

好友

1866

积分

偏将军

Rank: 4

板凳
发表于 2013-4-29 22:25:00 |只看该作者
感觉和beginBitmapFill是一样的效果,只不过用法不同。发现lufylegend功能蛮多的。哈哈
希望加一个调整游戏亮度的函数。
另外请教一下,如何让页面停止(停止界面上一切活动,用LSystem.sleep()实现)直到鼠标点击?
回复

使用道具 举报

46

主题

3

好友

1866

积分

偏将军

Rank: 4

地板
发表于 2013-4-29 22:25:16 |只看该作者
感觉和beginBitmapFill是一样的效果,只不过用法不同。发现lufylegend功能蛮多的。哈哈
希望加一个调整游戏亮度的函数。
另外请教一下,如何让页面停止(停止界面上一切活动,用LSystem.sleep()实现)直到鼠标点击?
回复

使用道具 举报

37

主题

8

好友

9312

积分

诸侯王

Rank: 15Rank: 15Rank: 15Rank: 15Rank: 15

5#
发表于 2013-4-29 23:18:46 |只看该作者
yorhomwang 发表于 2013-4-29 22:25
感觉和beginBitmapFill是一样的效果,只不过用法不同。发现lufylegend功能蛮多的。哈哈
希望加一个调整游 ...

和beginBitmapFill是有区别的,beginBitmapFill只能用于单张图片,而mask的效果则可以作用于任意可视对象,包括文字,因为它影响的对象是LSprite。我之所以说它需要完善,是因为它使用起来有些限制,比如在使用mask的过程中,遮罩和被遮罩的对象中都不可以有旋转,缩放,透明等效果...
调整游戏亮度?画面变亮和变暗?貌似可以使用LSprite的graphics属性,在游戏的最上层绘制一个和游戏界面同样大小的黑色矩形框,然后通过改变它的透明度,来控制游戏界面的明暗。
让页面停止,是说游戏中的暂停功能吗?lufylegend中的时间轴,一般都是通过LEvent.ENTER_FRAME来实现的,比如你在某处添加了stageLayer.addEventListener(LEvent.ENTER_FRAME,onframe);
那么onframe函数就会开始不断的被循环调用,要实现暂停的话,可以设一个变量isStop,默认值为false,然后点击游戏暂停后,isStop的值变为true,这样在onframe函数中添加一行判断就可以了。
  1. function onframe(){
  2. if(isStop)return;
  3. //代码
  4. }
复制代码
这样,在所有时间轴函数中都加上这个判断的话,就可以实现整个游戏的暂停了。
当然,也可以将所有需要循环的函数,都用一个时间轴函数来控制,这样只需要控制这一个函数是否停止就可以了。
不回答与技术和引擎不相关的问题
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

防止垃圾广告,请填写任意字符

Archiver|lufy's legend

GMT+8, 2024-5-6 19:56 , Processed in 0.047052 second(s), 20 queries .

Powered by Discuz! X2.5

© 2001-2012 Comsenz Inc.

回顶部