0

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

4

1 回答 1

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 更新用户在屏幕上看到的内容

于 2012-05-30T17:33:09.020 回答