VioletaBabel
10일 : cocos2d-x 입문 본문
코코스2d-x 프로젝트 만들기
콘솔에서 만들 폴더를 향해 cd로 이동 후
cocos new Mycppgame -p kr.academy.sample -l cpp
같은 식으로 입력하면 된다.
new는 새 프로젝트 생성
-p는 패키지 이름
-l은 개발에 쓸 언어
--
cocos2d-x
씬 안에 레이어가 있다. 레이어는 스프라이트를 가진다.
cocos2d-x는 new와 delete를 쓰지 않는다.
new 대신 create라는 함수를 사용. 자동으로 지워지는 명령어가 들어가있음.
따로 메모리를 우리가 관리할 필요가 없다.
========================================================
cocos2d-x에 새로운 씬 만들기
기본적으로 AppDelegate.cpp, AppDelegate.h, HelloWorldScene.cpp, HelloWorldScene.h가 있다.
추가적으로 GameScene과 GameLayer라는 클래스를 만들어주자.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | //GameScene.h #pragma once #include<cocos2d.h> //using namespace cocos2d; USING_NS_CC; // using namespace cocos2d; 를 줄여놓은 것. class GameScene : public Scene //씬을 만들 것이므로 씬을 상속받자. { public: GameScene(); ~GameScene(); bool init(); CREATE_FUNC(GameScene); // 크리에이트펑션이란 매크로. // 이닛 해주고 오토릴리즈 해주는 애라고 함. // 매 프레임마다 검사하며 부모 클래스가 없으면 죽임(메모리를 알아서 관리) }; | cs |
1 2 3 4 5 6 7 8 9 10 11 12 | //GameLayer.h #pragma once #include <cocos2d.h> USING_NS_CC; class GameLayer : public Layer { public: GameLayer(); ~GameLayer(); bool init(); CREATE_FUNC(GameLayer); }; | cs |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | #include "GameScene.h" #include "GameLayer.h" GameScene::GameScene() { } GameScene::~GameScene() { } bool GameScene::init() { GameLayer* pLayer = GameLayer::create(); addChild(pLayer); // 위에 게임레이어헤더를 부르고 이렇게 함으로써 씬에서도 레이어를 갖다붙일 수 있게 됨. 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 | #include "GameLayer.h" GameLayer::GameLayer() { } GameLayer::~GameLayer() { } bool GameLayer::init() { //인터넷에 다운받아 프로젝트 폴더의 Resources 폴더의 res 폴더에 넣은 이미지파일을 스프라이트로 만든다. Sprite* pSprite = Sprite::create("res/moomin.png"); /* // 정적인 이동법 pSprite->setPosition(240, 160); // 위치를 240, 160으로 옮김 pSprite->setScale(1.2f); // 1.2배 크기로 만듦 pSprite->setRotation(90); // 시계 방향으로 90도 회전 */ MoveTo* pMove = MoveTo::create(1.0f, Point(240, 160)); // 1초동안 (240, 160)으로 이동시키는 이동을 만든다. pSprite->runAction(pMove); // pSprite가 pMove 이동을 하게 한다. RotateTo* pRot = RotateTo::create(1.5f, 90.0f); // 1.5초동안 90도로 회전 ScaleTo* pSc = ScaleTo::create(1.5f, 2.0f); //1.5초동안 2배로 커짐 //Sequence* pSeq = Sequence::create(pRot, pSc, NULL); // pRot과 pSc가 이어서 실행 Spawn* pSpawn = Spawn::create(pRot, pSc, NULL); // 이건 동시에 실행. //pSprite->runAction(pSeq); // pSprite가 pSeq를 하게 함 pSprite->runAction(pSpawn); // pSpawn 실행 addChild(pSprite);//pSprite를 레이어의 자식으로 넣는다. return true; } | cs |
그리고 AppDelegate.cpp를 열어서
1 | #include"../proj.win32/GameScene.h" // 직접 만든 GameScene.h를 불러온다. | cs |
를 불러온다.
1 2 | //auto scene = HelloWorld::createScene(); // 씬을 만든다 auto scene = GameScene::create(); // 우리가 만든 씬을 넣는다. | cs |
기본으로 뜨는 씬을 우리가 만든 씬으로 대체한다.
CREATE_FUNC(GameScene);를 하면
GameScene* scene = GameScene::create(); 라는 방식으로 생성이 가능해진다.
이렇게 하면 저 매크로 안의 autorelease 함수를 호출하여 autorelease pool에 들어가게 되고, delete를 안해도 알아서 메모리가 필요 없어지면 지워주게 된다.
코코스에서는 기본적으로 사용하는 방식이니 꼭 기억해둘 것.
addChild(pLayer)는 객체를 화면에 출력하는 메소드인데, 위의 코드처럼 보면 pLayer라는 객체를 화면에 종속시키는 역할을 한다고 보면 된다. 부모-자식관계가 되기에 부모가 화면에서 안보이면 자식도 안보이고, 부모의 좌표가 바뀌면 자식도 함께 바뀐다. addChild는 addChild(pLayer, 1) 같은 식으로 두 번째 인수에 z값을 줄 수 있는데, 같은 위치에 이미지가 겹치면 z값이 큰 것이 위에 놓이고, z값을 설정하지 않은 경우(0으로 설정됨) 나중에 한 것이 더 위에 놓여진다.
'BCA > 2. Cocos2d-x' 카테고리의 다른 글
15일 : 파일 입출력, 오디오, 러닝게임 완성 (0) | 2018.02.28 |
---|---|
14일 : 애니메이션 (0) | 2018.02.27 |
13일 : 복습 겸 아주 자잘한 팁 (0) | 2018.02.26 |
12일 : 플래피 버드 완성하기 (0) | 2018.02.23 |
11일 : 터치, 업데이트, 배경, 장애물 등장 (0) | 2018.02.22 |