如何在线条工具上应用滤镜模糊?动作脚本

时间:2013-02-23 11:49:59

标签: actionscript-3 flash drawing

所以我有两个线工具。第一个是法线工具,第二个是具有滤镜模糊效果的线条工具。当画布上的线条绘制时,工具工作,但第一个法线工具也有模糊效果。如何仅在第二个工具上应用模糊效果?

抱歉语法不好......

 var blurX:Number = 20;
 var blurY:Number = 20;
 var quality:Number = 1;
 var my_blur_filter:BlurFilter = new BlurFilter(blurX, blurY, quality);

//没有滤镜模糊的工具

function PencilTool(event:MouseEvent):void{

quitActiveTool();
active = "Pencil";

board.addEventListener(MouseEvent.MOUSE_DOWN, MouseDown);
board.addEventListener(MouseEvent.MOUSE_UP, MouseUp);

}


function MouseDown(e:MouseEvent):void{


    doDraw=true;

    drawingLine.graphics.moveTo(drawingLine.mouseX, drawingLine.mouseY);
    drawingLine.graphics.lineStyle(lineSize, activeColor, lineAlpha);

    board.addEventListener(MouseEvent.MOUSE_MOVE, MouseMove);

}

//带滤镜模糊的工具

 function brushTool(event:MouseEvent):void{

    quitActiveTool();
    active = "Brush";

      board.addEventListener(MouseEvent.MOUSE_DOWN, brushMouseDown);
      board.addEventListener(MouseEvent.MOUSE_UP, MouseUp);

}


function brushMouseDown(e:MouseEvent):void{




    doDraw=true;

    if(active=="Brush"){
    drawingLine.filters = new Array(my_blur_filter);


    drawingLine.graphics.moveTo(drawingLine.mouseX, drawingLine.mouseY);


    drawingLine.graphics.lineStyle(lineSize, activeColor, lineAlpha);


    }
    board.addEventListener(MouseEvent.MOUSE_MOVE, MouseMove);

}

//鼠标移动&小鼠了

function MouseMove(e:MouseEvent):void{
                var curX:Number=drawingLine.mouseX;
                var curY:Number=drawingLine.mouseY;


                        drawingLine.graphics.lineTo(curX,curY);


                    e.updateAfterEvent();

    }

function MouseUp(event:MouseEvent):void{

    doDraw=false;
    }

1 个答案:

答案 0 :(得分:0)

过滤器应用于整个显示对象,而不仅仅是设置后添加的图形。您可以使用两个图层,drawingLine表示铅笔,drawingLineBlurred表示画笔,然后只将模糊添加到drawingLineBlurred

通过为每个笔划创建一个新的显示对象,甚至将它们绘制到BitmapData对象,您可以变得更复杂,但对于一个简单的绘图工具,这可能就足够了。

作为绘制多个图层的示例,您可以在每次按下鼠标时创建一个新的Shape并绘制到该drawingLine而不是private var currentStroke:Shape; private function startDrawing():void { currentStroke = new Shape(); addChild(currentStroke); // Apply the blur filter to currentStroke here if the brush tool is selected. currentStroke.graphics.moveTo(currentStroke.mouseX, currentStroke.mouseY); currentStroke.graphics.lineStyle(lineSize, activeColor, lineAlpha); } // etc

Shape

但这显然效率不高,因为你最终会得到很多{{1}}个。如果它成为一个问题,我建议改为查看BitmapData并在每次描边完成后使用它来绘制。