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