창작에 관련된 질문이나 간단한 팁, 예제를 올리는 곳
글 수 185
흔히 구글에서 찾아보면 다음과 같은 Clipping Layer 소스를 찾을 수 있다.
CCEGLView::sharedOpenGLView()->setScissorInPoints( // scissorRect is the rectangle you want to show.
clippingRegion.origin.x + getPosition().x, clippingRegion.origin.y + getPosition().y,
clippingRegion.size.width, clippingRegion.size.height);
중요한 것은 저 setScissorInPoints에서 받아들이는 영역이 '절대 좌표'라는 것이다.
물론 그렇기에 getPosition().x을 추가해서 해당 Layer가 이동했을 때 적절하게 클리핑하려고 했고
보통은 여기서 크게 문제를 못 느낀다.
하지만!!
만약 클리핑 될 Layer가 최상단이 아닌 누군가의 자식으로 지역 좌표를 쓰고 있다면?
예를 들어 (0,100)에 있는 레이어에서 그 레이어의 (0,100)에 새로운 레이어를 생성하고 저 클리핑을 적용하면...
100만큼 잘려 버린다. 부모의 좌표가 반영되지 않으므로...
그리므로 getPosition() 부분을 월드 좌표로 바꿔줘야
자식 노드로 레이어를 생성해도 문제 없이 클리핑을 할 수 있다.
CCPoint world_pos = convertToWorldSpace(CCPointZero);
CCEGLView::sharedOpenGLView()->setScissorInPoints( // scissorRect is the rectangle you want to show.
clippingRegion.origin.x + world_pos.x, clippingRegion.origin.y + world_pos.y,
clippingRegion.size.width, clippingRegion.size.height);