2012-05-30 60 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

在屏幕上。非常感謝您的回覆。我嘗試過,但效果不佳。它只有在我畫得非常緩慢時才起作用,所以它抓住了所有的鼠標位置,但是如果我畫得更快,它會繞過所有檢查,我認爲需要獲得路徑上的所有點可以解決這個問題,但不知道該怎麼做。不管怎樣,謝謝你 –