2014년 3월 14일 금요일

[Cocos2d-x 3.0] Sprite

※ Sprite 
Sprite *spr = Sprite::create("Icon.png");
spr->setAnchorPoint(Point::ZERO);
spr->setPosition(Point(100, 100));
this->addChild(spr);

create() : 객체를 생성하는 메소드
setAnchorPoint() : 앵커포인트를 설정하는 메소드
setPosition() : 위치를 설정하는 메소드
addChild() : 객체를 화면에 출력하는 메소드


ㄱ. create()
Sprite를 생성하는 방법은 크게 3가지로 구분할 수 있는데, 위와 같이 파일명을 입력해서 만드는 방법과 SpriteFrame을 이용해서 만드는 방법, 마지막으로 텍스쳐를 가지고 만드는 방법이 있다.
단순하게 파일을 가지고 만드는 방법은 위와 같이 바로 파일명을 입력하는 방법이 있고, 아래 소스 코드처럼 파일명과 영역을 지정해서 이미지 파일에서 지정된 위치만 Sprite로 만드는 방법이 있다.

Sprite *spr = Sprite::create("Icon.png", Rect(0, 0, 100, 100));

또한, 일반적으로 코코스2d-x에서 사용되는 대부분의 객체는 create() 메소드를 통해서 생성을 하며, 이것을 통해서 생성된 메소드는 따로 메모리 관리를 하지 않아도 된다.


ㄴ. addChild()
addChild()은 단순하게 화면에 출력해주는 메소드가 아니라 위에 소스 코드에서는 spr이라는 Sprite 객체를 this인 화면 레이어에 종속시키는 역할도 하는 메소드이다. 이러한 관계를 부모-자식(Parent-Child)관계라고 하고 자식은 부모에게 종속된다. 예를 들어 부모가 화면에서 안보여지게 되면 자식도 함께 보여지지 않으며, 부모의 좌표가 이동하게 되면, 따로 자식의 좌표를 이동시키지 않아도 부모에 종속된 모든 자식들도 이동하게 된다.

addChild()를 할 때 위와 같이 단순하게 객체를 입력하는 것외에 z-Order와 Tag라는 것을 추가로 입력할 수 있다. z-Order는 z축의 값을 말하는 것이며, 이 값이 클수록 위쪽에 위치하게 된다. 즉, 같은 위치에 이미지 같은 것이 겹쳐질때 z축의 값이 큰 것이 위에 놓이게 된다. 따로 z축의 값을 설정하지 않을때에는 addChild()를 나중에 한 객체가 위에 놓여지게 된다.

this->addChild(spr, 1);
this->addChild(spr, 2);
[ x, y, z 축 ]

Tag는 부모에 종속되어 있는 자식들에게 번호를 매기는 것으로 이렇게 매긴 번호로 아래와 같이 자식의 객체를 다시 리턴 받을 수도 있다.

this->addChild(spr, 1, TAG_1);
Sprite *pSpr_1 = (Sprite *)this->getChildByTag(TAG_1);

ㄷ. 기타 메소드들
setScale() : 확대, 축소하는 메소드
- setScale(0.5) : 0.5배 축소
- setScale(2.0) : 2배 확대
- setScaleX(0.5) : 너비만 0.5배 축소
- setScaleY(2.0) : 높이만 2배 확대

setRotation() : 회전하는 메소드, (0~360)
- setRotation(90) : 시계방향으로 90도 회전하기
- setRotation(-45) : 반시계방향으로 45도 회전하기
- setRotationX(45) : X 좌표축을 기준으로 45도 회전하기
- setRotationY(45) : Y 좌표축을 기준으로 45도 회전하기

setOpacity() : 알파값을 설정하는 메소드, (0~255)
- setOpacity(128) : 반투명상태 만들기
- setOpacity(0) : 투명상태 만들기
- setOpacity(255) : 불투명상태 만들기

setVisible() : 화면에 출력여부를 정하는 메소드
- setVisible(true) : 화면에 보임
- setVisible(false) : 화면에 안보임

setFlipX(), setFlipY() : 반전하기
- setFlipX(true) : x축을 기준으로 반전하기
- setFlipY(true) : y축을 기준으로 반전하기


※ Point, Size, Rect 관련
Point() : x좌표, y좌표 값을 가지는 자료구조형
- Point(100, 100) : (100, 100)의 좌표값
- point pos = Point(50, 50);
- Point::ZERO => Point(0, 0)
- pos.x, pos.y

Size() : 너비(width)와 높이(height)를 가지는 자료구조형
- Size(100, 100) : 너비 100과 높이 100의 사이즈값
- Size size = Size(50, 50);
- size.width, size.height;

Rect() : 역영의 값(위치와 사이즈)을 가지는 자료구조형
- Rect(0, 0, 100 ,100) : (0, 0) 좌표의 사이즈 (100, 100)를 나타내는 값
- Rect rect = Rect(0, 0, 100, 100);
- rect.origin.x, rect.origin.y, rect.size.width, rect.size.height;




댓글 없음: