본문 바로가기

cocos2d

6.실습용 기본형 실행파일 생성

기본적으로 생성된 파일의 소스는 아래와 같습니다.


역시 책에서 보였던 소스와는 약간은 틀립니다.


레퍼런스 사이트를 나중에 천천히 봐야할 듯 하네요.


http://www.cocos2d-x.org/reference/native-cpp/V3.5/index.html


#include "HelloWorldScene.h"

#include "SimpleAudioEngine.h" //버전 3.5에서부터 추가된 기능인것 같습니다.


USING_NS_CC;


Scene* HelloWorld::createScene()

{

    // 'scene' is an autorelease object

    auto scene = Scene::create();

    

    // 'layer' is an autorelease object

    auto layer = HelloWorld::create();


    // add layer as a child to scene

    scene->addChild(layer);


    // return the scene

    return scene;

}


// on "init" you need to initialize your instance

bool HelloWorld::init()

{

    //////////////////////////////

    // 1. super init first

    if ( !Layer::init() )

    {

        return false;

    }

    

    auto visibleSize = Director::getInstance()->getVisibleSize();

    Vec2 origin = Director::getInstance()->getVisibleOrigin();


    /////////////////////////////

    // 2. add a menu item with "X" image, which is clicked to quit the program

    //    you may modify it.


    // add a "close" icon to exit the progress. it's an autorelease object

    auto closeItem = MenuItemImage::create(

                                           "CloseNormal.png",

                                           "CloseSelected.png",

                                           CC_CALLBACK_1(HelloWorld::menuCloseCallback, this));

    

    closeItem->setPosition(Vec2(origin.x + visibleSize.width - closeItem->getContentSize().width/2 ,

                                origin.y + closeItem->getContentSize().height/2));


    // create menu, it's an autorelease object

    auto menu = Menu::create(closeItem, NULL);

    menu->setPosition(Vec2::ZERO);

    this->addChild(menu, 1);


    /////////////////////////////

    // 3. add your codes below...


    // add a label shows "Hello World"

    // create and initialize a label

    

    auto label = Label::createWithTTF("Hello World", "fonts/Marker Felt.ttf", 24);

    

    // position the label on the center of the screen

    label->setPosition(Vec2(origin.x + visibleSize.width/2,

                            origin.y + visibleSize.height - label->getContentSize().height));


    // add the label as a child to this layer

    this->addChild(label, 1);


    // add "HelloWorld" splash screen"

    auto sprite = Sprite::create("HelloWorld.png");


    // position the sprite on the center of the screen

    sprite->setPosition(Vec2(visibleSize.width/2 + origin.x, visibleSize.height/2 + origin.y));


    // add the sprite as a child to this layer

    this->addChild(sprite, 0);

    

    return true;

}



void HelloWorld::menuCloseCallback(Ref* pSender)

{

    //Close the cocos2d-x game scene and quit the application

    Director::getInstance()->end();


    #if (CC_TARGET_PLATFORM == CC_PLATFORM_IOS)

    exit(0);

#endif

    

    /*To navigate back to native iOS screen(if present) without quitting the application  ,do not use Director::getInstance()->end() and exit(0) as given above,instead trigger a custom event created in RootViewController.mm as below*/

    

    //EventCustom customEndEvent("game_scene_close_event");

    //_eventDispatcher->dispatchEvent(&customEndEvent);

    

    

}




위에 소스를 기본 실습을 위해 정리해 보도록 하겠습니다.


#include "HelloWorldScene.h"

#include "SimpleAudioEngine.h" //책에는 빠져있지만 넣어 보도록 합니다.


Scene* HelloWorld::createScene()

{

    // 'scene' is an autorelease object

    auto scene = Scene::create();

    

    // 'layer' is an autorelease object

    auto layer = HelloWorld::create();


    // add layer as a child to scene

    scene->addChild(layer);


    // return the scene

    return scene;

}


// on "init" you need to initialize your instance

bool HelloWorld::init()

{

    //////////////////////////////

    // 1. super init first

    if ( !Layer::init() )

    {

        return false;

    }

   

    return true;

}


나머지 부분들은 과감하게 삭제를 해보도록 합니다.


변경된 소스는 이렇습니다.


auto scene = Scene::create()


createScene() 메소드는 Scene을 생성합니다.


auto layer = HelloWorld::crate();

scene->addChild(layer);


그런다음 Layer 클래스를 상속받은 HelloWorld 클래스를 생성한 


다음 먼저 생성한 scene 에 HelloWorld 클래스를 addChild()로 포함합니다.



return scene;


마지막으로 생성한 scene를 반환하는 코드입니다.


다른 화면에서 화면 전환을 하기 위해 createscene() 메소드를 호출할 경우


새로운 Scene이 생성될 뿐만 아니라 레이어도 생성한 후 addChild()로 포함해서 반환하기 때문에


해당 클래스에서 구현한 내용으로 새로운 화면이 구성되는 것입니다.



bool HelloWorld::init()


createScene()에서 레이어를  생성할 때 자동으로 호출되는 메소드입니다.


머 일단은 무슨 이야기 인지는 잘 이해가 되지 않지만 그냥 넘어가도록 합니다.