动态生成的显示对象作为渐变遮罩

Dynamically generated display object as a gradient mask

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

代码工作正常,除非它忽略动态创建的 alpha 渐变 Sprite 用作渐变蒙版(它被视为实体蒙版) ),而确切的代码承认 "on-stage" 创建的对象(通过用户界面)是渐变蒙版!

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

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;
    }
}


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

pentagon1.parent.addChild(gradientMask);