2011-08-28 55 views
2

我正在使用-mouseDragged方法移動一些CALayers,現在我想在它們足夠接近時(或者它們只有一點點重疊時)「咬合」它們。每個圖層都不是「正方形」:我正在繪製不同的多邊形。與CALayers對齊

我認爲一個辦法做到這一點是:

  1. 得到層的移動的位置;
  2. 獲取重疊圖層或靠近要移動的圖層的圖層;
  3. 在(2)爲真的多邊形的每一邊,我需要檢查移動層的邊和層的邊之間的最大距離(與層邊垂直) 「接近」(當層重疊時,這是負值)。
  4. 相應地移動圖層。

我不知道這是否是一種正確的方法。我想到的第一件事是:

  • 如果我可以在多個方面「捕捉」會發生什麼?

而且,即使我嘗試這種方式,我也不知道如何處理(2)和(3)。

有沒有更好的方法來做到這一點?

回答

0

這並不容易。由於CALayer不是矢量圖形,因此必須處理任何可能的形狀(例如,龍的圖片)。

適當的碰撞很困難。相反嘗試使用想要捕捉的形狀來測試鼠標/觸摸位置。

您可以通過在鼠標位置檢查每個可能捕捉圖層的透明度來完成此操作。有關如何執行此操作的信息,請參閱this question

更加困難,但更好的結果:

使用2D物理引擎像Chipmunk或Box2D的做你的碰撞檢測。