항상 그렇듯이 씬은 배경화면, 게임레이어, 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 - 25, 64 + 128 * i); addChild(bg1, 2, j + 300); bg1 = Sprite::create("res/bg/dirt2_3.png"); bg1->setPosition(896 + 25, 64 + 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(640, 900); auto mv = MoveTo::create(0.7f, Point(640, 420)); auto mv2 = MoveTo::create(0.1f, Point(640, 450)); auto mv3 = MoveTo::create(0.1f, Point(640, 430)); 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 |