2012-06-18 5 views

답변

1

철저한 검색 외에 다른 방법이 있을지 모르겠습니다. 2 개의 모서리 (참조 코너, 창 위치를 확인하고 반대쪽 모서리 또는 참조 모서리와 창의 치수를 비교하여 반환 됨)를 사용할 수 있으며 각 창에 대해 다른 창 모서리 중 하나가 거짓인지 확인합니다 현재 창 모서리 사이. 이 철저한 접근법은 O (n^2)이지만, 수천 개의 창을 다루지 않는 한 여전히 매우 빠를 것입니다.

일부 의사 :

inside (point, window): 
    if point.x less than window.corner1.x and point.x greater than window.corner2.x 
    and point.y less than window.corner1.y and point.y greater than window.corner2.y, 
     true. 
    false. 

check_for_collision (window1, window2): 
    if (window1.corner1 inside window2) or (window1.corner2 inside window2), true. 
    else if window2.corner1 inside window1 or window2.corner2 inside window1, true. 
    otherwise, false. 

check_group_of_windows (windowlist): 
    loop: 
     if size of windowlist is 1 or less, stop looping 
     let window be windowlist.pop 
     for each otherwindow in windowlist: 
      if check_for_collision(window, otherwindow), true. 
    false. 

그게 어떤 의미가 있기를 바랍니다.

+0

동의. 자신의 프레임을 확인하여 중복되는지 확인하는 방법을 직접 작성하십시오. '[[self window] 틀]'이 여기있을 것입니다. – guitarflow

+1

CGRectIntersectsRect를 사용할 수 없습니까? – Yep