lufy's legend

标题: 位图与位图不能MASK [打印本页]

作者: zyflzxy    时间: 2014-12-9 16:28
标题: 位图与位图不能MASK
如果位图与位图不能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;

作者: lufy    时间: 2014-12-9 17:46
canvas里位图是不能做遮罩的,如果实在要做的话,lufylegend中可以使用一些特殊的做法,让位图或者对象变成遮罩,下面是个例子
上面的是正常动画,下面的动画是用遮罩,具体做法你看一下代码吧
http://lufylegend.com/demo/test/66.html
作者: zyflzxy    时间: 2014-12-10 10:27
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);
作者: lufy    时间: 2014-12-10 10:40
zyflzxy 发表于 2014-12-10 10:27
就是遮罩和被遮罩在不同的容器里,可不可以实现MASK?        (这两个位图是在同个容器里)

hideSprite = new  ...

所谓遮罩,就是不应该显示的东西
作者: zyflzxy    时间: 2014-12-10 17:41
我想的是这种效果,你看能实现到吗?
就是被遮罩的位图,能实实调用不同的遮罩,而不是限定一个。
clothesMc.getChildByName(“mc1”).mask = maskMc.getChildByName("mask1");
clothesMc.getChildByName(“mc1”).mask = maskMc.getChildByName("mask2");
clothesMc.getChildByName(“mc2”).mask = maskMc.getChildByName("mask1");
以此类推,maskMc里面有很多遮罩位图。
作者: zyflzxy    时间: 2014-12-10 17:42
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里面有很多遮罩位图。
作者: lufy    时间: 2014-12-10 18:04
zyflzxy 发表于 2014-12-10 17:42
我想的是这种效果,你看能实现到吗?
就是被遮罩的位图,能实实调用不同的遮罩,而不是限定一个。
clothe ...

我给你的那个连接,mask就是一个LAnimationTimeLine对象,也就是一个LSprite对象
动画都能当遮罩了,改变遮罩的形状不是很简单吗
按你的这个,把遮罩设置为maskMc,然后把maskMc中遮罩部分设为可现实,其他不是遮罩的部分设置为不显示,不就ok了吗?
不同的对象,要对应不同的遮罩,如果都想用maskMc的话,clone一下分别使用就ok了
作者: zyflzxy    时间: 2014-12-11 10:15
lufy 发表于 2014-12-10 18:04
我给你的那个连接,mask就是一个LAnimationTimeLine对象,也就是一个LSprite对象
动画都能当遮罩了,改变 ...

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

hideSprite.addChild(bitmapFace);

bitmapDataShow.draw(hideSprite);
作者: lufy    时间: 2014-12-11 12: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);了

够明白了吧
作者: zyflzxy    时间: 2014-12-11 14:42
lufy 发表于 2014-12-11 12:20
首先你要知道LBlendMode,API中都有解释,SOURCE_IN是在新图形以及已有内容重叠的地方,新图形才绘制。所 ...

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

clothesMc.getChildByName(“mc1”).mask = maskMc.getChildByName("mask1");
clothesMc.getChildByName(“mc2”).mask = maskMc.getChildByName("mask2");
作者: lufy    时间: 2014-12-11 21:08
zyflzxy 发表于 2014-12-11 14:42
谢谢您的细心回复,我也明白了你的意思,但是我不太懂怎么去弄,你能做个简单的演示吗?
就是多个位图, ...

如果你要用位图做遮罩的话,就不能用mask了,得像我前面给你的例子一样用LBlendMode
如果是普通的遮罩就简单了,
你到底是想用位图遮罩还是普通的mask?
作者: zyflzxy    时间: 2014-12-12 09:49
lufy 发表于 2014-12-11 21:08
如果你要用位图做遮罩的话,就不能用mask了,得像我前面给你的例子一样用LBlendMode
如果是普通的遮罩就简 ...

位图与位图的遮罩
作者: lufy    时间: 2014-12-12 10:27
zyflzxy 发表于 2014-12-11 14:42
谢谢您的细心回复,我也明白了你的意思,但是我不太懂怎么去弄,你能做个简单的演示吗?
就是多个位图, ...

只能帮你到这里了
剩下的依葫芦画瓢自己弄吧
三个对象,分别对应三个mask
http://lufylegend.com/demo/test/167.html
作者: zyflzxy    时间: 2014-12-12 10:35
lufy 发表于 2014-12-12 10:27
只能帮你到这里了
剩下的依葫芦画瓢自己弄吧
三个对象,分别对应三个mask

谢谢,你真是太厉害了,也很细心的回复我们。




欢迎光临 lufy's legend (http://lufylegend.com/forum/) Powered by Discuz! X2.5