as3使用补间擦除淡化alpha

时间:2012-09-06 18:51:47

标签: actionscript-3 flash transition alpha tween

是否可以使用as3补间功能使用软擦除过渡淡化alpha?

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

我想也许可以使用面具,但我不认为面具会接受alphas,否则就可以这样做。

2 个答案:

答案 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);