2012-05-30 58 views
0

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

回答

2

我认为你的意思是用户用某种笔工具画一条线,用鼠标。

这里是我会做:

首先,持有BitmapData对象绘制的线条的路径。

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

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

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

1.capture当前鼠标位置,并把它变成一个Point对象。

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

你还需要一个点来代表你的bitmapData的左上角。当前鼠标位置和lineBitmapData

var result:Boolean = lineBitmapData.hitTest(pt1, 0xFF, currentMousePosition); 

在则hitTest方法的第二个参数之间

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

2.perform碰撞检测是门限值。基本上,这需要设置为您希望算作命中的最小alpha值。

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

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

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

4.Update用户看到新lineBitmapData

+0

在屏幕上。非常感谢您的回复。我尝试过,但效果不佳。它只有在我画得非常缓慢时才起作用,所以它抓住了所有的鼠标位置,但是如果我画得更快,它会绕过所有检查,我认为需要获得路径上的所有点可以解决这个问题,但不知道该怎么做。不管怎样,谢谢你 –