2011-08-28 62 views
2

我正在使用-mouseDragged方法移动一些CALayers,现在我想在它们足够接近时(或者它们只有一点点重叠时)“咬合”它们。每个图层都不是“正方形”:我正在绘制不同的多边形。与CALayers对齐

我认为一个办法做到这一点是:

  1. 得到层的移动的位置;
  2. 获取重叠图层或靠近要移动的图层的图层;
  3. 在(2)为真的多边形的每一边,我需要检查移动层的边和层的边之间的最大距离(与层边垂直) “接近”(当层重叠时,这是负值)。
  4. 相应地移动图层。

我不知道这是否是一种正确的方法。我想到的第一件事是:

  • 如果我可以在多个方面“捕捉”会发生什么?

而且,即使我尝试这种方式,我也不知道如何处理(2)和(3)。

有没有更好的方法来做到这一点?

回答

0

这并不容易。由于CALayer不是矢量图形,因此必须处理任何可能的形状(例如,龙的图片)。

适当的碰撞很困难。相反尝试使用想要捕捉的形状来测试鼠标/触摸位置。

您可以通过在鼠标位置检查每个可能捕捉图层的透明度来完成此操作。有关如何执行此操作的信息,请参阅this question

更加困难,但更好的结果:

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