是否可以使用 as3 tween 通过软擦除过渡淡化 alpha?
我想也许http://www.greensock.com可能有答案,但我什么也没找到。我希望图像从一侧逐渐消失到另一侧。软溶解。
我认为也许可以使用蒙版,但我认为蒙版不接受 alpha,否则可以这样做。
是否可以使用 as3 tween 通过软擦除过渡淡化 alpha?
我想也许http://www.greensock.com可能有答案,但我什么也没找到。我希望图像从一侧逐渐消失到另一侧。软溶解。
我认为也许可以使用蒙版,但我认为蒙版不接受 alpha,否则可以这样做。
实际上面具允许阿尔法。这是一种黑客行为。您应该尝试在代码中编写此代码:
maskMC.cacheAsBitmap = true;
objMC.cacheAsBitmap = true;
objMC.mask = maskMC;
其中 objMC 是您的动画影片剪辑,而 maskMC 是您的蒙版,其中包含具有透明度的渐变形状。在此处查看示例:链接
您也可以使用 Greensock 实现此效果。代码如下所示:
TweenLite.to(objMC, 1, {"alpha":0, "x":objMC.x + 10});
使用 TweenLite 时,您需要提供动画对象、动画持续时间和Object
类的实例(这是我们在花括号之间编写的内容)。这个实例包含我们想要逐渐改变的所有值。
您可以使用 ALPHA 混合模式来完成此操作。
制作一个具有渐变的形状,其 alpha 从完全变为无,然后将其设置为混合模式 ALPHA,将其放在与要遮罩的项目相同的容器中。
然后将容器 blendmode 设置为 LAYER
伪代码:
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);