2011-07-27 43 views
1

我只是想盡量避免滾動我自己的拖動功能。有沒有人知道任何有相當於startDrag()的圖書館,你可以使用圓形半徑作爲拖拽邊界,而不是矩形框?具有與非矩形邊界(即:圓形)等效的startDrag()的AS3庫?

+0

請參見下面的問題和答案以進行循環拖動:將[約束MovieClip拖動到一個圓](http://stackoverflow.com/questions/6509716/constrain-movieclip-drag-to-a-circle/6510032#6510032) 。 –

回答

1

(對於圓形阻力區) - 你需要做的是:

一)MOUSE_DOWN:商店開始位置。開始收聽Enter_frame。

b)中ENTER_FRAME:從鼠標位置檢查距離的鼠標來啓動POS(使用畢達哥拉斯)

c)中只有當距離小於x

d移動您的對象)MOUSE_UP:停止聽輸入框

+0

是的,這就是我所說的「滾我自己」的意思,是我會採取的方法。在最初的問題中,我問是否有人知道任何已經完成這個工作的圖書館。我會將問題留給開放一段時間,如果沒有人使用內置此庫的表面,我會接受您的答案。 –

0

不,你需要做像素完美的碰撞(或在這種情況下,鼠標點擊),以便做到這一點。就本質而言,所有顯示對象總是具有矩形邊界。所以基本上你不得不做這樣的事情:

mySprite.addEventListener(MouseEvent.MOUSE_DOWN, mousedDown); 

function mousedDown(e:MouseEvent):void 
{ 
    //Draw my sprite to a bitmap, then check the bitmap colour at mouseX/mouseY 
    uint colour = myBitmap.getPixel32(mouseX, mouseY); 
    if(colour != TRANSPARENT){ 
     //We've actually clicked on the object, drag it 
     Sprite(e.currentTarget).startDrag(); 
    } 
} 

注意這僅僅是僞代碼,你就必須要弄清楚的單元值透明事情的發生,同時也你必須考慮繪製到位圖時,精靈的起始點在哪裏。假設你有一個精靈,內容在裏面,你需要創建一個Matrix對象,它的X和Y偏移量是你的精靈寬度的0.5倍,以便正確繪製它。

+0

嗨,感謝您的評論。我想我的問題一定不太清楚。有問題的邊界並不意味着確定對象的命中區域(通過這種方式自動完成)。這是關於我可以拖動對象的邊界!即:startDrag(lockCenter:Bool,bounds:Rect)。當你指定邊界時,你必須指定一個Rect,超過該Rect你不能拖動對象(它只是停止拖動)。這是我期望的行爲,但我希望邊界是一個圓形的區域,而不是一個矩形區域。它根本不需要處理碰撞。 –

+0

Ohhhhhhhh大聲笑沒關係對此感到抱歉。如果我能想到或找到任何東西,我會發佈一個新的答案。 – 2011-07-27 05:52:17

1

您可以使用簡單的圓形碰撞檢測程序,使用物體的半徑和它們之間的距離計算出擊中區域。也許你將不得不在你的onDrag方法中手動做這個計算,並停止與下面計算的圓形邊界的碰撞拖動。

 var deltax : Number = targetCentreCoord.x - hitTestCentreCoord.x; 
     var deltay : Number = targetCentreCoord.y - hitTestCentreCoord.y; 

     //works out if our circles are colliding, distance between the circles inc radius    
     if (((deltax * deltax) + (deltay * deltay)) <= ((((targetRadius) + (hitTargetRadius)) * ((targetRadius) + (hitTargetRadius))))) 
     { 
      Log.info("collision occured with " + candidate.name + " target coords " + targetCentreCoord + " candidate coords " + hitTestCentreCoord); 
      return true; 
     } 
     return false; 
+0

再一次,對不起,這個問題沒有涉及碰撞。 –

+1

你需要做碰撞檢測來檢測你的問題中的邊界,然後你會停止拖動。除非我誤解你的問題。 – serenskye

+0

因此,我沒有碰到任何東西。只需要限制拖動的邊界。 AS3本身可以做到這一點,但只有一個矩形邊界框,而不是圓形邊界框。同樣,這個問題特別要求圖書館,而不是本土解決方案。本土方法很簡單,但圖書館可以捕捉到所有邊緣案例,這就是我問的原因。 –

-1

這可以在沒有ENTER_FRAME事件的情況下完成。 有一個MOUSE_DOWN偵聽器,檢查邊界,如果在邊界內,然後 添加一個MOUSE_MOVE偵聽器。 另外,從MOUSE_UP偵聽器開始移除MOUSE_MOVE偵聽器。