如何使用drawGraphicsData方法停止在tile中绘图?

时间:2014-05-21 08:23:34

标签: actionscript-3 flash bitmap

在下面的示例中,我使用行笔划的位图绘制画布。当我释放鼠标按钮时,我查询 drawHolder 以获取其图形内容,并使用 readGraphicsData 将结果保存在变量结果供以后使用。

当我按下绿色按钮时,我将结果矢量提交到 copyHolder 以使用 drawGraphicsData 方法渲染形状。

这是事情变得有趣的地方:如果你看一下 pic2 copyHolder 包含 copyHolder 边界之外的其他图形内容。我认为问题出在 drawGraphicsData ,因为我查看了结果向量的内容,似乎它包含一些额外的 GraphicsPath 实例

你能想到一个解决方案如何使用掩码删除/隐藏这些exta路径没有吗?

pic1

pic2 pic3

var result:Vector.<IGraphicsData > ;

loadBtn.addEventListener(MouseEvent.CLICK,loadData);

var bitmapData:BitmapData = new (getDefinitionByName(String("myBitmapData"))) as BitmapData;


stage.addEventListener(MouseEvent.MOUSE_DOWN,onMouseDown);
stage.addEventListener(MouseEvent.MOUSE_UP,onMouseUp);

function onMouseDown(e:MouseEvent)
{
    drawHolder.graphics.lineStyle(20);
    drawHolder.graphics.lineBitmapStyle(bitmapData, null, false, true);
    drawHolder.graphics.moveTo(mouseX - drawHolder.x, mouseY - drawHolder.u);
    addEventListener(Event.ENTER_FRAME,onEnterFrame);
}

function onMouseUp(e:MouseEvent)
{
    removeEventListener(Event.ENTER_FRAME,onEnterFrame);
    result = drawHolder.graphics.readGraphicsData(false);
}

function onEnterFrame(e:Event)
{
    drawHolder.graphics.lineTo(mouseX - drawHolder.x, mouseY - drawHolder.y);
}


function loadData(e:MouseEvent)
{
    copyHolder.graphics.clear();
    copyHolder.graphics.drawGraphicsData(result);
}

1 个答案:

答案 0 :(得分:0)

首先,你的代码中有一个拼写错误,它说&#34; drawHolder.u&#34;而不是&#34; drawHolder.y&#34;在onMouseDown()。我认为这是对额外线条的回应,因为你moveTo()做错了坐标。第二,在readGraphicsData()结果手册中提到了额外的元素:

&#34;虽然原始矢量内容是使用drawGraphicsData()方法绘制的,但readGraphicsData()方法检索的矢量数据对象与传入drawGraphicsData()方法的矢量数据对象并不完全匹配。例如,结果数据包括GraphicsSolidFill和GraphicsEndFill命令,这两个命令都隐含但实际上不存在于原始图形数据中。&#34;

Source (Adobe manual)

还值得注意的是readGraphicsData返回相对于舞台的值,而不是要查询的图形的父DisplayObject。在复制图形内容之前,请考虑更改源位置和变换。