우선 씬이 있고 배경레이어, 캐릭터레이어, UI레이어가 있다.

1
2
3
4
5
6
7
8
9
10
11
12
13
bool GameScene::init()
{
    auto* bgLayer1 = BgLayer::create();
    addChild(bgLayer1, 0"bg");
 
    auto* pLayer = GameLayer::create();
    addChild(pLayer, 1"player");
 
    auto* pUILayer = UILayer::create();
    addChild(pUILayer, 2"UI");
    
    return true;
}
cs



배경레이어는 뭐 별다른거 없이 이전과 마찬가지로 알아서 앞으로 감.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
bool BgLayer::init()
{
    auto pSprite1 = Sprite::create("res/bg.png");
    addChild(pSprite1, 01);
    pSprite1->setPosition(500375);
 
    auto pSprite2 = Sprite::create("res/bg.png");
    addChild(pSprite2, 02);
    pSprite2->setPosition(1500375);
 
    scheduleUpdate();
    return true;
}
 
void BgLayer::update(float dt)
{
    auto pSprite1 = getChildByTag(1);
    auto pSprite2 = getChildByTag(2);
 
    pSprite1->setPositionX(pSprite1->getPositionX() - 200.0f * dt);
    pSprite2->setPositionX(pSprite2->getPositionX() - 200.0f * dt);
 
    if(pSprite1->getPositionX() < -500)
        pSprite1->setPositionX(pSprite2->getPositionX() + 1000.0f);
    else if (pSprite2->getPositionX() < -500)
        pSprite2->setPositionX(pSprite1->getPositionX() + 1000.0f);
}
cs



UI레이어도 구현하다 귀찮아서 HP만 뜨게끔 만들었다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
UILayer::UILayer()
{
    HP = 3;
}
 
 
UILayer::~UILayer()
{
}
 
bool UILayer::init()
{
    Sprite* pHP1 = Sprite::create("res/heart.png");
    Sprite* pHP2 = Sprite::create("res/heart.png");
    Sprite* pHP3 = Sprite::create("res/heart.png");
    addChild(pHP1, 01);
    addChild(pHP2, 02);
    addChild(pHP3, 03);
    pHP1->setPosition(50700);
    pHP2->setPosition(pHP1->getPositionX() + 50, pHP1->getPositionY());
    pHP3->setPosition(pHP2->getPositionX() + 50, pHP2->getPositionY());
 
    return true;
}
 
void UILayer::update(float dt)
{
}
 
int UILayer::gethp()
{
    return HP;
}
 
void UILayer::hpdown()
{
    HP--;
}
cs



게임 레이어에서는 주인공과 기본장애물을 생성하고 주기적으로 새로운 장애물을 생성한다.

그리고 자연스러운 장애물 생성을 위해 이전 장애물 번호를 기억하는 변수와 관련함수를 만듬.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
class GameLayer : public Layer
{
private:
    //float t;
    float spx;
    int prevgno;
    int airgroundno;
 
public:
    GameLayer();
    ~GameLayer();
 
    bool init();
    void update(float dt);
    int getgno();
    void setgno(int gno);
    int getairno();
    void setairno(int num);
 
    CREATE_FUNC(GameLayer);
};
cs


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
#include "GameLayer.h"
#include "Ground.h"
#include "Character.h"
 
GameLayer::GameLayer()
{
    srand(time(0));    
    spx = 0;            // 픽셀마다 장애물 출력하게 하기위해
    prevgno = 3;        // 장애물의 이전번호를 레이어에서 기억하기위해
    airgroundno = 0;    // 공중장애물의 높이 조정
}
 
 
GameLayer::~GameLayer()
{
}
 
bool GameLayer::init()
{
    // 주인공 생성
    auto hero = Character::create();
    addChild(hero, 1100);
 
    // 기본 그라운드 생성
    auto BasicGround = Ground::create();
    addChild(BasicGround, 1);
    BasicGround->basicgroundprint();
 
    scheduleUpdate();
    return true;
}
 
void GameLayer::update(float dt)
{
    auto hero = getChildByTag(100);
 
    // 초당 256픽셀씩 더해줌
    spx += 256.0f*dt;
    
    // 더하는 중간에 합이 128이 넘으면 장애물을 
    if (spx >= 128)
    {
        auto newGround = Ground::create();
        addChild(newGround, 1);
        newGround->print();
        spx -= 128;
    }
}
int GameLayer::getgno()
{
    return prevgno;
}
 
void GameLayer::setgno(int gno)
{
    prevgno = gno;
}
 
int GameLayer::getairno()
{
    return airgroundno;
}
 
void GameLayer::setairno(int num)
{
    airgroundno = num;
}
 
cs


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

Tank Game 만들기 - 1  (0) 2018.03.28
Running Game 만들기 - 2  (0) 2018.03.28
기타 잡다한 팁들  (0) 2018.03.28
사운드 사용하기 (오디오 엔진)  (0) 2018.03.28
애니메이션 사용하기  (0) 2018.03.28
Posted by misty_
,