lufy's legend

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

位图与位图不能MASK

[复制链接]

65

主题

2

好友

1355

积分

偏将军

Rank: 4

跳转到指定楼层
楼主
发表于 2014-12-9 16:28:11 |只看该作者 |倒序浏览
如果位图与位图不能MASK,那用什么方法呢,如果下面这个方法,back 与 img不在同个的容器里,就无法实现MASK效果,应该如何解决。var imgLayer = new LSprite();var back = new LBitmap(new LBitmapData(dataList["back"]));imgLayer.addChild(back);var img = new LBitmap(new LBitmapData(dataList["img"]));imgLayer.addChild(img);img.blendMode = LBlendMode.LIGHTER;
回复

使用道具 举报

37

主题

8

好友

9312

积分

诸侯王

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

沙发
发表于 2014-12-9 17:46:29 |只看该作者
canvas里位图是不能做遮罩的,如果实在要做的话,lufylegend中可以使用一些特殊的做法,让位图或者对象变成遮罩,下面是个例子
上面的是正常动画,下面的动画是用遮罩,具体做法你看一下代码吧
http://lufylegend.com/demo/test/66.html
不回答与技术和引擎不相关的问题
回复

使用道具 举报

65

主题

2

好友

1355

积分

偏将军

Rank: 4

板凳
发表于 2014-12-10 10:27:33 |只看该作者
lufy 发表于 2014-12-9 17:46
canvas里位图是不能做遮罩的,如果实在要做的话,lufylegend中可以使用一些特殊的做法,让位图或者对象变成 ...

就是遮罩和被遮罩在不同的容器里,可不可以实现MASK?        (这两个位图是在同个容器里)

hideSprite = new LSprite();
        playerData = new LBitmapData(result["player"]);
        hidePlayer = new LAnimationTimeline(playerData,LGlobal.divideCoordinate(480,630,3,4));
        hideSprite.addChild(hidePlayer);
       
        var bitmapData = new LBitmapData(result["face"]);
        bitmapFace = new LBitmap(bitmapData);
        bitmapFace.blendMode = LBlendMode.SOURCE_IN;
        hideSprite.addChild(bitmapFace);
回复

使用道具 举报

37

主题

8

好友

9312

积分

诸侯王

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

地板
发表于 2014-12-10 10:40:43 |只看该作者
zyflzxy 发表于 2014-12-10 10:27
就是遮罩和被遮罩在不同的容器里,可不可以实现MASK?        (这两个位图是在同个容器里)

hideSprite = new  ...

所谓遮罩,就是不应该显示的东西
不回答与技术和引擎不相关的问题
回复

使用道具 举报

65

主题

2

好友

1355

积分

偏将军

Rank: 4

5#
发表于 2014-12-10 17:41:44 |只看该作者
我想的是这种效果,你看能实现到吗?
就是被遮罩的位图,能实实调用不同的遮罩,而不是限定一个。
clothesMc.getChildByName(“mc1”).mask = maskMc.getChildByName("mask1");
clothesMc.getChildByName(“mc1”).mask = maskMc.getChildByName("mask2");
clothesMc.getChildByName(“mc2”).mask = maskMc.getChildByName("mask1");
以此类推,maskMc里面有很多遮罩位图。
回复

使用道具 举报

65

主题

2

好友

1355

积分

偏将军

Rank: 4

6#
发表于 2014-12-10 17:42:35 |只看该作者
lufy 发表于 2014-12-10 10:40
所谓遮罩,就是不应该显示的东西

我想的是这种效果,你看能实现到吗?
就是被遮罩的位图,能实实调用不同的遮罩,而不是限定一个。
clothesMc.getChildByName(“mc1”).mask = maskMc.getChildByName("mask1");
clothesMc.getChildByName(“mc1”).mask = maskMc.getChildByName("mask2");
clothesMc.getChildByName(“mc2”).mask = maskMc.getChildByName("mask4");
以此类推,maskMc里面有很多遮罩位图。
回复

使用道具 举报

37

主题

8

好友

9312

积分

诸侯王

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

7#
发表于 2014-12-10 18:04:50 |只看该作者
zyflzxy 发表于 2014-12-10 17:42
我想的是这种效果,你看能实现到吗?
就是被遮罩的位图,能实实调用不同的遮罩,而不是限定一个。
clothe ...

我给你的那个连接,mask就是一个LAnimationTimeLine对象,也就是一个LSprite对象
动画都能当遮罩了,改变遮罩的形状不是很简单吗
按你的这个,把遮罩设置为maskMc,然后把maskMc中遮罩部分设为可现实,其他不是遮罩的部分设置为不显示,不就ok了吗?
不同的对象,要对应不同的遮罩,如果都想用maskMc的话,clone一下分别使用就ok了
不回答与技术和引擎不相关的问题
回复

使用道具 举报

65

主题

2

好友

1355

积分

偏将军

Rank: 4

8#
发表于 2014-12-11 10:15:30 |只看该作者
lufy 发表于 2014-12-10 18:04
我给你的那个连接,mask就是一个LAnimationTimeLine对象,也就是一个LSprite对象
动画都能当遮罩了,改变 ...

可是你这个遮罩层里面放了遮罩与被遮罩都放在同个容器里,然后再进行绘制,我还是不太明白其中的原理。
hideSprite.addChild(hidePlayer);

hideSprite.addChild(bitmapFace);

bitmapDataShow.draw(hideSprite);
回复

使用道具 举报

37

主题

8

好友

9312

积分

诸侯王

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

9#
发表于 2014-12-11 12:20:20 |只看该作者
zyflzxy 发表于 2014-12-11 10:15
可是你这个遮罩层里面放了遮罩与被遮罩都放在同个容器里,然后再进行绘制,我还是不太明白其中的原理。
h ...

首先你要知道LBlendMode,API中都有解释,SOURCE_IN是在新图形以及已有内容重叠的地方,新图形才绘制。所有其他内容成为透明。
hideSprite是一个容器,先假设这个容器已经被添加到画面上了
那么先在容器中加入动画hidePlayer,这时候就显示了hidePlayer
再加入bitmapFace,bitmapFace会把原来的hidePlayer盖上,但是这时候设置了bitmapFace.blendMode = LBlendMode.SOURCE_IN;
所以只显示bitmapFace的重叠的部分

再说说,为什么我要让它hide,就是说hideSprite容器并没有添加到画面上
因为LBlendMode的效果是使用在整个canvas上的,为了不影响其他的图形对象,所以它不可以显示
又不能显示它,又要把它里面的图形拿出来,所以就是最后的bitmapDataShow.draw(hideSprite);了

够明白了吧
不回答与技术和引擎不相关的问题
回复

使用道具 举报

65

主题

2

好友

1355

积分

偏将军

Rank: 4

10#
发表于 2014-12-11 14:42:31 |只看该作者
lufy 发表于 2014-12-11 12:20
首先你要知道LBlendMode,API中都有解释,SOURCE_IN是在新图形以及已有内容重叠的地方,新图形才绘制。所 ...

谢谢您的细心回复,我也明白了你的意思,但是我不太懂怎么去弄,你能做个简单的演示吗?
就是多个位图,引用多个不一样的遮罩效果吗。

clothesMc.getChildByName(“mc1”).mask = maskMc.getChildByName("mask1");
clothesMc.getChildByName(“mc2”).mask = maskMc.getChildByName("mask2");
回复

使用道具 举报

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

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

Archiver|lufy's legend

GMT+8, 2024-5-6 20:07 , Processed in 0.051439 second(s), 20 queries .

Powered by Discuz! X2.5

© 2001-2012 Comsenz Inc.

回顶部