动态生成的显示对象作为渐变蒙版

时间:2016-08-06 14:38:54

标签: actionscript-3 flash gradient mask

我只是想创建一个渐变蒙版 - 它是通过AS3代码动态生成的 - 一个对象(以下例子中的五边形),我只是,不能! [The SWF file of what I've tried.]

代码工作正常,除非忽略动态创建的Sprite的alpha渐变用作渐变蒙版(它被视为实体蒙版),而确切的代码确认“舞台上”创建的对象(通过用户界面)作为渐变掩码!

我认为运行时不能将对象缓存为位图,因而无知!但是,我坚持要做到这一点!所以,请对此有所了解,提前非常感谢任何帮助:)

var X:Number = 100, Y:Number = 35, W:Number = 350, H:Number = 150;

var mat:Matrix = new Matrix();
mat.createGradientBox(W, H, 0, X, Y);

var gradientMask:Sprite = new Sprite();
gradientMask.graphics.beginGradientFill(GradientType.LINEAR, [0, 0], [1, 0], [0, 255], mat);
gradientMask.graphics.drawRect(X, Y, W, H);
gradientMask.graphics.endFill();

pentagon1.cacheAsBitmap = true;
pentagon2.cacheAsBitmap = true;
onStageGradient.cacheAsBitmap = true;
gradientMask.cacheAsBitmap = true;

pentagon1.mask = gradientMask;
pentagon2.mask = onStageGradient;

stage.addEventListener(Event.ENTER_FRAME, _onEnterFrame);
function _onEnterFrame(e:Event):void {
    pentagon1.x += 7;
    pentagon2.x += 7;

    if (pentagon1.x > 500) {
        pentagon1.x = 0;
        pentagon2.x = 0;
    }
}

<小时/> enter image description here

1 个答案:

答案 0 :(得分:2)

您必须将gradientMask添加到display list才能生效。

pentagon1.parent.addChild(gradientMask);