설모의 기록
[cocos-2d js] CCGeometry.js 메소드 본문
cocos-2d js 에서 기본으로 제공하는 js 파일인 CCGeometry.js 파일 내 메소드들에 대해서 알아보겠습니다.
저는 캐릭터의 사각형 충돌체와 장애물의 사각형 충돌체가 겹치는 때를 알기 위해 update 문에서 cc.rectIntersectRect() 메소드를 사용했었는데요. 이처럼 두 점 비교, 점과 사각형 비교, 사각형과 사각형을 비교하는 등의 작업을 할 때 이 파일 내의 메소드를 사용합니다.
- cc.pointEqualToPoint : 두 cc.p() 의 x, y 값이 같은지를 비교합니다.
1 2 3 | cc.pointEqualToPoint = function (point1, point2) { return point1 && point2 && (point1.x === point2.x) && (point1.y === point2.y); }; |
- 두 인자가 제대로 들어왔는지, 두 점의 x, y 값이 같은지를 비교해 boolean 값을 반환합니다.
- cc.sizeEqualToSize : 두 cc.size() 의 width, height 값들이 같은지를 비교합니다.
1 2 3 | cc.sizeEqualToSize = function (size1, size2) { return size1 && size2 && (size1.x === size2.x) && (size1.y === size2.y); }; |
- 두 인자가 제데로 들어왔는지, 두 size 객체의 width, height 값이 같은지를 비교해 boolean 값을 반환합니다.
- cc.rectEqualToRect : 두 cc.rect() 의 x, y, width, height 값들이 같은지를 비교합니다.
1 2 3 4 | cc.rectEqualToRect = function (rect1, rect2) { return rect1 && rect2 && (rect1.x === rect2.x) && (rect1.y === rect2.y) && (rect1.width === rect2.width) && (rect1.height === rect2.height); }; |
- 두 인자가 제대로 들어왔는지, 두 rect 객체의 x, y, width, height 값이 같은지를 비교해 boolean 값을 반환합니다.
- cc.rectEqualToZero : cc.rect() 가 cc.rect(0, 0, 0, 0) 과 같은지를 비교합니다.
1 2 3 4 | cc.rectEqualToZero = function (rect) { return rect && (rect.x === 0) && (rect.y === 0) && (rect.width === 0) && (rect.height === 0); }; |
- 인자로 들어온 rect 가 존재하는지, rect 의 x, y, width, height 값이 0인지를 비교해 boolean 값을 반환합니다.
- cc.rectContainsRect : rect1 이 rect2 를 포함하는지 비교합니다.
1 2 3 4 5 6 | cc.rectContainsRect = function (rect1, rect2) { if (!rect1 || !rect2) return false; return !( (rect1.x >= rect2.x) || (rect1.y >= rect2.y) || (rect1.x + rect1.width <= rect2.x + rect2.width) || (rect1.y + rect1.height <= rect2.y + rect2.height) ); |
- 두 인자가 제대로 들어왔는지, rect1 이 rect2 를 포함하는지 비교해 boolean 값을 반환합니다.
- cc.rectGetMaxX, cc.rectGetMidX, cc.rectGetMinX : rect의 x 값 중 최대값, 중간값, 최소값을 반환합니다.
1 2 3 4 5 6 7 8 9 10 11 | cc.rectGetMaxX = function (rect) { return (rect.x + rect.width); }; cc.rectGetMidX = function (rect) { return (rect.x + rect.width / 2.0); }; cc.rectGetMinX = function (rect) { return rect.x;
}; |
- cc.rectGetMaxY, cc.rectGetMidY, cc.rectGetMinY : rect의 x 값 중 최대값, 중간값, 최소값을 반환합니다.
1 2 3 4 5 6 7 8 9 10 11 | cc.rectGetMaxY = function (rect) { return(rect.y + rect.height); }; cc.rectGetMidY = function (rect) { return rect.y + rect.height / 2.0; }; cc.rectGetMinY = function (rect) { return rect.y; }; |
- cc.rectContainsPoint : rect 가 point 를 포함하는지를 비교합니다.
1 2 3 4 | cc.rectContainsPoint = function (rect, point) { return (point.x >= cc.rectGetMinX(rect) && point.x <= cc.rectGetMaxX(rect) && point.y >= cc.rectGetMinY(rect) && point.y <= cc.rectGetMaxY(rect)) ; }; |
- 점의 x,y 값과 rect 의 x, y 의 최소값과 최대값을 비교해 점이 rect 안에 존재하는지를 boolean 값으로 반환합니다.
- cc.rectIntersectRect : ra 와 rb 가 교차하는지를 비교합니다.
1 2 3 4 5 6 7 | cc.rectIntersectsRect = function (ra, rb) { var maxax = ra.x + ra.width, maxay = ra.y + ra.height, maxbx = rb.x + rb.width, maxby = rb.y + rb.height; return !(maxax < rb.x || maxbx < ra.x || maxay < rb.y || maxby < ra.y); }; |
- cc.rectOverlapsRect : rectA와 rectB가 겹치는지를 비교합니다.
1 2 3 4 5 6 | cc.rectOverlapsRect = function (rectA, rectB) { return !((rectA.x + rectA.width < rectB.x) || (rectB.x + rectB.width < rectA.x) || (rectA.y + rectA.height < rectB.y) || (rectB.y + rectB.height < rectA.y)); }; |
- cc.rectUnion : rectA 와 rectB 를 포함하는 사각형 중 가장 작은 rect 를 반환합니다.
1 2 3 4 5 6 7 8 | cc.rectUnion = function (rectA, rectB) { var rect = cc.rect(0, 0, 0, 0); rect.x = Math.min(rectA.x, rectB.x); rect.y = Math.min(rectA.y, rectB.y); rect.width = Math.max(rectA.x + rectA.width, rectB.x + rectB.width) - rect.x; rect.height = Math.max(rectA.y + rectA.height, rectB.y + rectB.height) - rect.y; return rect; }; |
- rectA 와 rectB 의 x, y, width, height 를 이용해 두 사각형을 포함하는 가장 작은 rect 를 반환합니다.
- cc.rectIntersection : rectA 와 rectB 가 겹쳐지는 부분을 rect 객체로 반환합니다.
1 2 3 4 5 6 7 8 9 10 11 | cc.rectIntersection = function (rectA, rectB) { var intersection = cc.rect( Math.max(cc.rectGetMinX(rectA), cc.rectGetMinX(rectB)), Math.max(cc.rectGetMinY(rectA), cc.rectGetMinY(rectB)), 0, 0); intersection.width = Math.min(cc.rectGetMaxX(rectA), cc.rectGetMaxX(rectB)) - cc.rectGetMinX(intersection); intersection.height = Math.min(cc.rectGetMaxY(rectA), cc.rectGetMaxY(rectB)) - cc.rectGetMinY(intersection); return intersection; }; |
이상으로 CCGeometry.js 파일 내 메소드들에 대해 알아봤습니다. :)
'게임엔진 > Cocos-2d js' 카테고리의 다른 글
chipmunk..js 정리 (0) | 2017.08.21 |
---|