Actionscript 3 如何在线应用过滤器模糊工具?动作脚本
所以我有两行工具。第一个是普通线工具,第二个是带滤镜模糊效果的线工具。当线条在画布上绘制时,该工具可以工作,但第一个法线工具也具有模糊效果。如何仅在第二个工具上应用模糊效果 抱歉语法不好Actionscript 3 如何在线应用过滤器模糊工具?动作脚本,actionscript-3,flash,drawing,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); //没有滤镜模糊的工
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 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;
}
过滤器应用于整个显示对象,而不仅仅是设置过滤器后添加的图形。您可以使用两层,
drawingLine
用于铅笔和drawinglinefulled
用于画笔,然后仅将模糊添加到drawinglinefulled
通过为每个笔划创建一个新的显示对象,或者甚至将这些对象绘制到BitmapData
对象,您可能会变得更复杂,但对于一个简单的绘图工具来说,这可能就足够了
作为绘制多个图层的示例,您可以在每次按下鼠标时创建一个新图层并绘制到该图层,而不是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
s。如果它成为一个问题,我建议在每次笔划完成后查看并使用它进行绘制。我们可以使用它,但它会将不带模糊的线放在后面,将带模糊的线放在顶部。那么,我如何应用我在顶部选择的当前工具线和在后面选择的上一条工具线呢?在这种情况下,你必须变得更复杂一些,我添加了一个为每个笔划创建新图层的示例。