우선 씬이 있고 배경레이어, 캐릭터레이어, 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, 0, 1); pSprite1->setPosition(500, 375); auto pSprite2 = Sprite::create("res/bg.png"); addChild(pSprite2, 0, 2); pSprite2->setPosition(1500, 375); 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, 0, 1); addChild(pHP2, 0, 2); addChild(pHP3, 0, 3); pHP1->setPosition(50, 700); 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, 1, 100); // 기본 그라운드 생성 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 |