Flash绘图线重叠检查

时间:2012-05-30 16:39:01

标签: actionscript-3 flash-cs5

我有一个应用程序,用户必须在画布上绘制一条线而不重叠它。有没有办法测试重叠?我已经google了,但发现圆圈和矩形重叠的结果。我的情况不同。这里用户将在画布上绘制线条而不与线条本身重叠。可能是我遗漏了一些东西,所以任何指导都表示赞赏。感谢

1 个答案:

答案 0 :(得分:2)

我认为你的意思是用户使用鼠标在某种钢笔工具上划线。

这就是我要做的事情:

首先,保持在BitmapData对象中绘制的线的路径。

var lineBitmapData:BitmapData = new BitmapData(display.width,display.height,true,0x00000000);

这将创建一个透明的位图对象,其上包含用户的行。

在每个帧(或计时器事件,如果您使用计时器)执行以下操作:

1.捕获当前鼠标位置并将其放入Point对象。

var currentMousePosition:Point = new Point(mouse.x,mouse.y);

您还需要一个代表bitmapData左上角的点。

var pt1:Point = new Point(1,1);

2.执行当前鼠标位置和lineBitmapData

之间的碰撞检测
var result:Boolean = lineBitmapData.hitTest(pt1, 0xFF, currentMousePosition);

hitTest方法中的第二个参数是阈值。基本上,这需要设置为您想要计为命中的最小alpha值。

3.检查hitTest的结果。如果它是假的,这意味着用户要绘制的帧不会与已经绘制的帧相交。在这种情况下,您将在最后一帧期间绘制的位添加到lineBitmapData。

但是,如果hitTest返回true,则意味着用户即将使其线相交,因此您的程序需要停止绘图(或任何您想要的行为)。

    if(result){
 myPenTool.stopDrawing();}else{
var drawnLastFrame:BitmapData = myPenTool.drawSingleFrameLine();
lineBitmapData.draw(drawnLastFrame);}

4.使用新的lineBitmapData

更新用户在屏幕上看到的内容