2011-08-28 2 views
2

나는 -mouseDragged 메서드를 사용하여 몇개의 CALayers를 움직이고 있는데, 충분히 가까울 때 (또는 조금 겹쳐있을 때) 나는 "스냅"하고 싶습니다. 각 레이어는 "사각형"이 아닙니다. 다른 폴리곤을 그리는 중입니다. CALayers로 물리기

나는이 작업을 수행 할 수있는 방법이다 생각 :

  1. 이동되는 레이어의 위치를 ​​얻을;
  2. 겹쳐진 레이어 또는 이동되는 레이어 근처의 레이어를 가져옵니다.
  3. (2)가 참인 다각형의 각면에서 이동하는 레이어의 측면과 레이어의 측면 사이의 최대 거리 (레이어 측면에 직각)를 확인해야합니다. "near"(레이어가 겹칠 때 음수 값)
  4. 따라서 레이어를 이동하십시오.

이것이 올바른 방법인지는 확실하지 않습니다. 내 마음에 가장 먼저 오는 것은 다음과 같습니다.

  • 한 쪽 이상을 "찍을"수 있다면 어떻게됩니까?

그리고이 방법을 사용해도 (2) 및 (3)에 관해서 무엇을해야할지 모르겠습니다.

더 좋은 방법이 있습니까?

답변

0

이것은 쉽지 않습니다. CALayers는 벡터 그래픽이 아니기 때문에 가능한 모양 (예 : 용의 그림)을 다뤄야합니다.

적절한 충돌은 어렵습니다. 대신 스냅하려는 모양으로 마우스/터치의 위치를 ​​테스트 해보십시오.

마우스 위치에서 가능한 모든 스냅 핑 레이어의 투명도를 검사하여이 작업을 수행 할 수 있습니다. 이를 수행하는 방법에 대한 정보는 this question을 참조하십시오.

더 어렵지만 더 나은 결과 :

은 충돌 감지를 할 Chipmunk 또는 Box2D의 같은 2D 물리 엔진을 사용합니다.