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