레이어도 씬과 마찬가지로 클래스를 생성한 후 아래와 같이 만들어준다.

1
2
3
4
5
6
7
8
9
10
11
12
13
#include <cocos2d.h>
USING_NS_CC;
 
#pragma once
class GameLayer : public Layer
{
public:
    GameLayer();
    ~GameLayer();
 
    bool init();
    CREATE_FUNC(GameLayer);
};
cs

씬과는 다른점은 레이어를 상속받는다는 것이다.




이제 Sprite를 하나 생성해보자. 

init함수를 만들고 거기에 아래와 같이 입력한다.

1
2
3
4
5
6
7
bool GameLayer::init()
{
    Sprite* pSprite = Sprite::create("res/kirby.png");
    addChild(pSprite);
 
    return true;
}
cs

Sprite도 마찬가지로 cocos에서 제공하는 create함수를 이용하여 만들 수 있다.

Resources폴더에 이미지를 넣고 해당 이미지를 불러오도록 하자. (위는 Resources\res\ 폴더에 넣어주었다)

Sprite를 만들었다면 addChild명령어를 통해 해당 Sprite를 GameLayer의 자식으로 넣어준다.


cocos2d-x에서는 엔진이 스스로 부모가 없는 개체를 알아서 죽여주기때문에 자식으로 넣어주지 않으면 

Sprite가 자동으로 죽어버린다. 그렇기 때문에 사용할 개체는 꼭 addChild를 해주어야한다.



addChild는 단순히 자식으로 추가할수 있는것뿐만 아니라 z축과 태그/네임 을 설정할 수 있다.

1
2
addChild(gl, 1105);
addChild(gl, 2"gl");
cs

2번째요소는 z축으로 z축의 크기에따라 다른오브젝트들보다 앞으로 나오거나 뒤로 나오게 할 수있다.

3번째요소는 tag 또는 name으로 나중에 구분해 찾기위해 사용한다.

1
2
Sprite* pSprite = (Sprite*)getChildByTag(105);
Sprite* pSprite = (Sprite*)getChildByTag("gl");
cs

아래와 같이 getChildByTag/Name 명령어를 통해 해당 오브젝트를 찾아서 행동을 할 수 있다.




마찬가지로 씬의 cpp파일로 돌아가 씬에도 레이어를 연결해준다.

1
2
3
4
5
6
7
8
9
#include "GameLayer.h"
 
bool GameScene::init()
{
    GameLayer* gl = GameLayer::create();
    addChild(gl);
 
    return true;
}
cs

레이어는 다른 클래스이므로 헤더파일을 include 해줘야지만 레이어를 찾을 수 있다.


이렇게 씬에 레이어, 레이어에 스프라이트를 연결해주면 실행시 내가 만든 씬이 정상적으로 뜰 것이다.


이미지가 짤려서 나오는 이유는

cocos창의 원점은 왼쪽아래이므로 왼쪽 아래가 (0,0)으로 잡혀있고

Sprite의 원점은 이미지의 중간점이 (0,0)으로 잡혀있기 때문에 오른쪽 윗부분만 출력 되는 것이다.


만약 정상적으로 왼쪽아래에 출력되게 하고싶다면 가로길이의 반, 세로길이의 반만큼 이동시켜주면 될 것이다.

'프로그래밍 공부 > cocos2d-x' 카테고리의 다른 글

Update 사용하기  (0) 2018.03.26
간단한 액션기능  (0) 2018.03.26
기본설정 및 씬 만들기  (0) 2018.03.22
cocos2d-x 설치 및 프로젝트 생성하기  (0) 2018.03.22
파일 입출력 (json 사용하기)  (0) 2018.03.02
Posted by misty_
,