1. 程式人生 > >cocos2d-x學習tests程式流程

cocos2d-x學習tests程式流程

bool AppDelegate::applicationDidFinishLaunching()
{
    // initialize director
    CCDirector *pDirector = CCDirector::sharedDirector();
    pDirector->setOpenGLView(&CCEGLView::sharedOpenGLView());

    // enable High Resource Mode(2x, such as iphone4) and maintains low resource on other devices.
    // pDirector->enableRetinaDisplay(true);

    // turn on display FPS
    pDirector->setDisplayStats(true);

    // set FPS. the default value is 1.0/60 if you don't call this
    pDirector->setAnimationInterval(1.0 / 60);

    CCScene * pScene = CCScene::create();
    CCLayer * pLayer = new TestController();
    pLayer->autorelease();

    pScene->addChild(pLayer);  
    pDirector->runWithScene(pScene);  
   return true;
}

AppDelegate是tests程式入口。看上面的程式碼,程式載入流程如下:

構造導演,導演設定相關屬性(FPS,openGLView);

建立場景;

建立佈景;

將佈景新增到場景;

導演執行場景;

整個程式的初始工作就完成了,後面就是各個場景的內容。

執行tests工程,可以看到第一個畫面是一個list,裡面N多項。

第一條ActionsTest,看一下載入流程:

在AppDelegate中有一句CCLayer * pLayer = new TestController();

看TestController的建構函式

TestController::TestController()
: m_tBeginPos(CCPointZero)
{
    // add close menu
    CCMenuItemImage *pCloseItem = CCMenuItemImage::create(s_pPathClose, s_pPathClose, this, menu_selector(TestController::closeCallback) );
    CCMenu* pMenu =CCMenu::create(pCloseItem, NULL);
    CCSize s = CCDirector::sharedDirector()->getWinSize();

    pMenu->setPosition( CCPointZero );
    pCloseItem->setPosition(CCPointMake( s.width - 30, s.height - 30));

    // add menu items for tests
    m_pItemMenu = CCMenu::create();

    for (int i = 0; i < TESTS_COUNT; ++i)
    {
       CCLabelTTF* label = CCLabelTTF::create(g_aTestNames[i].c_str(), "Arial", 24);
       
        CCMenuItemLabel* pMenuItem = CCMenuItemLabel::create(label, this, menu_selector(TestController::menuCallback));

        m_pItemMenu->addChild(pMenuItem, i + 10000);
        pMenuItem->setPosition( CCPointMake( s.width / 2, (s.height - (i + 1) * LINE_SPACE) ));
    }

    m_pItemMenu->setContentSize(CCSizeMake(s.width, (TESTS_COUNT + 1) * (LINE_SPACE)));
    m_pItemMenu->setPosition(s_tCurPos);
    addChild(m_pItemMenu);

    setTouchEnabled(true);

    addChild(pMenu, 1);

}
程式碼很好懂,新增關閉選單,新增tests的item,開啟Touch模式。

Touch一個item會進入對應的test,是由一個回撥函式實現:

menu_selector(TestController::menuCallback)

具體可以看這個函式的實現。

然後就進入各個item場景了