항상 그렇듯이 씬은 배경화면, 게임레이어, UI레이어가 있다.

1
2
3
4
5
6
7
8
9
10
11
12
bool GameScene::init()
{
    BgLayer* bg = BgLayer::create();
    addChild(bg, 0"bg");
 
    GameLayer* gl = GameLayer::create();
    addChild(gl, 1"gl");
 
    UILayer* ul = UILayer::create();
    addChild(ul, 2"ul");
    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
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
bool BgLayer::init()
{
    // sand
    // 세로
    for (int i = 0; i < 6; i++)
    {
        // 가로
        for (int j = 0; j < 4; j++)
        {
            Sprite* bg1;
            if (j < 3)
            {
                //sand
                bg1 = Sprite::create("res/bg/sand.png");
                bg1->setPosition(64 + 128 * j, 64 + 128 * i);
                addChild(bg1, 1, i * 3 + j);
 
                //grass
                bg1 = Sprite::create("res/bg/grass.png");
                bg1->setPosition(1216 - 128 * j, 64 + 128 * i);
                addChild(bg1, 1, i * 3 + j + 100);
            }
            //dirt
            bg1 = Sprite::create("res/bg/dirt.png");
            bg1->setPosition(448 + 128 * j, 64 + 128 * i);
            addChild(bg1, 1, i * 3 + j + 200);
 
            // 1번만 찍기위해
            if (j == 0)
            {
                bg1 = Sprite::create("res/bg/dirt2_1.png");
                bg1->setPosition(384 - 2564 + 128 * i);
                addChild(bg1, 2, j + 300);
 
                bg1 = Sprite::create("res/bg/dirt2_3.png");
                bg1->setPosition(896 + 2564 + 128 * i);
                addChild(bg1, 2, j + 350);
            }
        }
    }
 
    return true;
}
 
cs

똑같은데 배경이 타일로 되어있어 손이 좀 더 간다.



UI 레이어

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
69
70
71
#include "UILayer.h"
#include "GameLayer.h"
#include "GameMenu.h"
 
 
UILayer::UILayer()
{
    hp = 0;
}
 
 
UILayer::~UILayer()
{
}
 
int UILayer::gethp()
{
    return hp;
}
 
void UILayer::hpdown()
{
    hp--;
}
 
void UILayer::printhp()
{
    for (int i = 0; i < 3; i++)
    {
        Sprite* heart = Sprite::create("res/ui/heart.png");
        addChild(heart, 0, i);
        heart->setPosition(1240 - 48 * i, 690);
        hp++;
    }
}
 
bool UILayer::init()
{
    auto startmenu = GameMenu::create();
    addChild(startmenu, 0"startmenu");
    startmenu->printstart();
 
    scheduleUpdate();
    return true;
}
 
void UILayer::update(float dt)
{
    if (hp < 0)
    {
        hp = 0;
        auto gl = (GameLayer*)getParent()->getChildByName("gl");
        gl->stop();
 
        // 게임오버 스프라이트출력
        auto gameover = Sprite::create("res/ui/gameover.png");
        addChild(gameover, 0"gameover");
        gameover->setPosition(640900);
        auto mv = MoveTo::create(0.7f, Point(640420));
        auto mv2 = MoveTo::create(0.1f, Point(640450));
        auto mv3 = MoveTo::create(0.1f, Point(640430));
        auto sq = Sequence::create(mv, mv2, mv3, NULL);
        gameover->runAction(sq);
 
        // 리스타트버튼
        auto restartmenu = GameMenu::create();
        addChild(restartmenu, 0"restartmenu");
        restartmenu->printrestart();
    }
}
 
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
bool GameLayer::init()
{
    return true;
}
 
void GameLayer::start()
{
    // 음악재생
    int audioID = experimental::AudioEngine::play2d("res/Gigantic Moon.mp3"true);
    experimental::AudioEngine::setVolume(audioID, 0.5f);
    experimental::AudioEngine::setCurrentTime(audioID, 1.0f);
 
    Tank* mytank = Tank::create();
    addChild(mytank, 2"mytank");
 
    EnemyTank* enemytank = EnemyTank::create();
    addChild(enemytank, 1"enemytank");
 
    Barrier* basicbarrier = Barrier::create();
    addChild(basicbarrier, 0"basicbarrier");
}
 
void GameLayer::stop()
{
    auto mytank = getChildByName("mytank");
    auto enemytank = getChildByName("enemytank");
    auto basicbarrier = getChildByName("basicbarrier");
    mytank->removeFromParent();
    enemytank->removeFromParent();
    basicbarrier->removeFromParent();
}
cs

음악재생 및 오브젝트생성, 삭제만 관리


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

Tank Game 만들기 - 3  (0) 2018.03.28
Tank Game 만들기 - 2  (0) 2018.03.28
Running Game 만들기 - 2  (0) 2018.03.28
Running Game 만들기 - 1  (0) 2018.03.28
기타 잡다한 팁들  (0) 2018.03.28
Posted by misty_
,