2

是否可以使用 as3 tween 通过软擦除过渡淡化 alpha?

我想也许http://www.greensock.com可能有答案,但我什么也没找到。我希望图像从一侧逐渐消失到另一侧。软溶解。

我认为也许可以使用蒙版,但我认为蒙版不接受 alpha,否则可以这样做。

4

2 回答 2

1

实际上面具允许阿尔法。这是一种黑客行为。您应该尝试在代码中编写此代码:

maskMC.cacheAsBitmap = true;
objMC.cacheAsBitmap = true;
objMC.mask = maskMC;

其中 objMC 是您的动画影片剪辑,而 maskMC 是您的蒙版,其中包含具有透明度的渐变形状。在此处查看示例:链接

您也可以使用 Greensock 实现此效果。代码如下所示:

TweenLite.to(objMC, 1, {"alpha":0, "x":objMC.x + 10});

使用 TweenLite 时,您需要提供动画对象、动画持续时间和Object类的实例(这是我们在花括号之间编写的内容)。这个实例包含我们想要逐渐改变的所有值。

于 2012-09-06T21:12:59.983 回答
0

您可以使用 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);
于 2012-09-06T18:58:38.667 回答