是否可以使用as3补间功能使用软擦除过渡淡化alpha?
我想也许http://www.greensock.com可能有答案,但我什么也没找到。我希望图像从一侧慢慢消失到另一侧。柔软溶解。
我想也许可以使用面具,但我不认为面具会接受alphas,否则就可以这样做。
答案 0 :(得分:1)
实际上,面具允许使用alpha。这是一种黑客攻击。你应该尝试在代码中写这个:
maskMC.cacheAsBitmap = true;
objMC.cacheAsBitmap = true;
objMC.mask = maskMC;
其中objMC是动画MovieClip,maskMC是包含透明渐变形状的Mask。请在此处查看示例:Link
您也可以使用Greensock实现此效果。代码看起来像这样:
TweenLite.to(objMC, 1, {"alpha":0, "x":objMC.x + 10});
使用TweenLite时,您需要提供动画对象,动画持续时间和Object
类的实例(这是我们在花括号之间写的东西)。此实例包含我们希望逐渐更改的所有值。
答案 1 :(得分:0)
您可以使用ALPHA混合模式完成此操作。
制作一个渐变,其alpha从full变为零的形状,然后使其成为混合模式ALPHA,将其放在与您想要遮罩的项目相同的容器中。
然后将容器blendmode设置为LAYER
Psuedo代码:
container.blendMode = BlendMode.LAYER; //container holds both the mask and the thing you want masked
maskObj.blendMode = BlendMode.ALPHA;
drawMaskGradients();
这是我过去用来通过代码创建所述掩码的函数:(itemContainer是我正在屏蔽的对象) 但是,您可以使用设计工具在Flash IDE中完成所有操作。
softMaskSprite = new Sprite();
this.blendMode = BlendMode.LAYER;
softMaskSprite.blendMode = BlendMode.ALPHA;
softMaskSprite.mouseChildren = false;
softMaskSprite.mouseEnabled = false;
this.addChildAt(softMaskSprite,this.getChildIndex(itemContainer)+1);
//Create Sides
var top:Shape = new Shape();
var matr:Matrix = new Matrix();
matr.createGradientBox(areaWidth + (softMaskWidth * 2), softMaskWidth, 90 * (Math.PI / 180), 0, 0);
top.graphics.beginGradientFill(GradientType.LINEAR, [0xFF0000, 0x0000FF], [0,1], [0,255], matr, SpreadMethod.PAD);
top.graphics.drawRect(0, 0, areaWidth + (softMaskWidth * 2), softMaskWidth);
top.graphics.endFill();
top.x = softMaskWidth * -1;
top.y = softMaskWidth * -1;
softMaskSprite.addChild(top);
//BOTTOM
var bottom:Shape = new Shape();
matr = new Matrix();
matr.createGradientBox(areaWidth + (softMaskWidth * 2), softMaskWidth, 90 * (Math.PI / 180), 0, 0);
bottom.graphics.beginGradientFill(GradientType.LINEAR, [0xFF0000, 0x0000FF], [1,0], [0,255], matr, SpreadMethod.PAD);
bottom.graphics.drawRect(0, 0, areaWidth + (softMaskWidth * 2), softMaskWidth);
bottom.graphics.endFill();
bottom.y = areaHeight;
bottom.x = softMaskWidth * -1;
softMaskSprite.addChild(bottom);