动态生成的显示对象作为渐变遮罩
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);
我只想为一个对象(在我的以下示例中为五边形)创建一个渐变蒙版——它是通过 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);