설모의 기록

[cocos-2d js] CCGeometry.js 메소드 본문

게임엔진/Cocos-2d js

[cocos-2d js] CCGeometry.js 메소드

HA_Kwon 2018. 1. 8. 11:49

  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(0000);
    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)),
        00);
 
    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
Comments