为区域AS3中的所有内容添加模糊

时间:2016-10-06 19:09:24

标签: actionscript-3 flash blur

我想知道如何在某个区域添加模糊,例如在动画片段后面添加模糊,也许是一个模糊该动画片区域内所有内容的模板。

我不想模糊一切,只是动画片背后的内容:) 有点像Apple正在使用他们的菜单

1 个答案:

答案 0 :(得分:1)

在AS3中执行此操作的唯一方法是将MovieClip背后的任何内容绘制到位图,然后模糊位图。

例如,假设您的MovieClip是某种具有半透明背景的模式对话框,您可以使用以下脚本(在MovieClip内)来模糊背后的舞台上的任何内容它在位图表面上:

// create a bitmap surface to use as a blurred background
var blurData:BitmapData = new BitmapData(width, height, false);
var blur:Bitmap = new Bitmap(blurData);
addChildAt(blur, 0); // put the blur surface behind everything in the movieclip

// this function draws the portion of the stage that's behind the movieclip
// onto the bitmap surface, then blurs it
function drawBlurBehind():void {

    // fill the bitmap with the stage color first
    blurData.fillRect(blurData.rect, stage.color);

    // account for the coordinate offset of the stage and movieclip
    var offset:Point = globalToLocal(new Point());
    var matrix:Matrix = new Matrix();
    matrix.tx = offset.x;
    matrix.ty = offset.y;

    // hide the movieclip so it doesn't show up in the blurred background
    visible = false;

    // draw the stage behind the movieclip onto the bitmap
    blurData.draw(stage, matrix);

    // blur the background bitmap
    blurData.applyFilter(blurData, blurData.rect, new Point(), new BlurFilter(25, 25));

    // show the movieclip after the background has been blurred
    visible = true;
}

请注意,此图不是" live"任何时候任何变化(你移动动画片段或其后面的内容都会发生变化)你必须重绘。您可以使用ENTER_FRAME事件处理程序不断重绘每一帧,这基本上会使其生效,但这将相对昂贵,所以如果可以,请避免使用它。

另请注意,此脚本会绘制并模糊整个舞台(不包括动画片段),而不是严格的"背后"电影剪辑。因此,如果您希望事物出现在动画片段上方并且在动画片段后面不显得模糊,则在绘制模糊背景时,您必须将这些设置为visible=false