COCOS2D運行流程

學了幾天的coco2d-x引擎,現在總結一下:

AppDelegate類管理整個程序的生命週期。
在其中有這麼一段代碼:

  // create a scene. it's an autorelease object
    /*auto scene = HelloWorld::createScene();*/

    SceneManger *manger = new SceneManger();//創建對象
    manger->createLoadScene();//執行函數,具體看下面
//上述函數會創建一個場景,一個層,並將層加入到場景中

    // run
    director->runWithScene(manger->loadScene);
    //loadScene爲類SceneManger的成員變量,是一個場景。
    return true;

上述代碼的含義是創建一個場景,然後運行它。

void SceneManger::createLoadScene(){
    loadScene = Scene::create();
    LoadLayer *layer = LoadLayer::create();
    layer->tsm = this;
    loadScene->addChild(layer);
}

上述的代碼是創建一個場景,然後創建一個層,將層加入到場景中去,這裏的層是一個單獨的類。

class SceneManger
{
public:
    Scene *loadScene;
    Scene *openScene;
    Scene *clockScene;

    void createLoadScene();
    void goOpenScene();
    void goClockScene();


};

上述的代碼是場景管理器。

#pragma once
#include <iostream>
#include "cocos2d.h"
#include "SceneManger.h"
USING_NS_CC;

class LoadLayer :public Layer
{
public:
    CREATE_FUNC(LoadLayer);
    virtual bool init();
    void onScheduleOnce(float dt);

public:
    SceneManger *tsm;
};

上述的代碼是一個層的頭文件,要注意命名空間的聲明;在這裏可以在層中添加精靈,label之類的。要注意要繼承Layer層,並且LoadLayer *layer = LoadLayer::create();在場景管理器的這段代碼會在直接執行LoadLayer的init();


下面對一些代碼做出解釋:
SceneManger *manger = new SceneManger(); //創建場景管理器




director->runWithScene(manger->loadScene);//運行場景

loadScene = Scene::create();//創建場景
LoadLayer *layer = LoadLayer::create();//創建層

loadScene->addChild(layer);//將層加入到場景中

Size winSize = Director::getInstance()->getWinSize();//獲取窗口的大小

Label *label = Label::createWithTTF("Loading......", "fonts/Marker Felt.ttf", 32);//創建一個標籤

label->setPosition(Vec2(winSize.width / 2, winSize.height /2));//設置位置  Vec2代表二維

scheduleOnce(CC_SCHEDULE_SELECTOR(LoadLayer::onScheduleOnce),2.0);//2秒後調用函數一次

auto *chnStrings =
Dictionary::createWithContentsOfFile("string.xml");
    //解析xml


const char *str1 = ((String*)chnStrings->objectForKey("back"))->getCString();//獲取值


MenuItemLabel * menuItem = MenuItemLabel::create(Label::createWithSystemFont(str1, "", 30), CC_CALLBACK_1(clockLayer::menuCallBack, this));
//創建一個MenuItem
    menuItem->setPosition(Vec2(winSize.width*0.9,winSize.height*0.9));
    //設置位置
    auto menu = Menu::create(menuItem,NULL);//創建菜單
    menu->setPosition(Point::ZERO);//設置位置
    this->addChild(menu);//添加




    _background = Sprite::create("res/background.jpg");//創建一個精靈
    _background->setScale(0.5);//設置精靈的比例

_hour->setAnchorPoint(Vec2(0.5, 0));//設置錨點

schedule(CC_SCHEDULE_SELECTOR(clockLayer::timeUpdate),1.0);//此函數可調用自定義函數  1s調用一次

    _second->setRotation(sRotation);//設置精靈的旋轉角度
——second->getRotation();//得到精靈的旋轉角度


CREATE_FUNC(LoadLayer);
virtual bool init();
//cocos2d的宏函數  創建層 

USING_NS_CC;//命名空間

MenuItemLabel *menuItem_2 = MenuItemLabel::create(Label::createWithSystemFont(str3, "", 30), CC_CALLBACK_1(OpenLayer::menuCallBack, this));
//創建菜單項
menuItem_2->setTag(102);//設置標籤

Director::getInstance()->replaceScene(clockScene);//切換場景



auto *chnStrings = Dictionary::createWithContentsOfFile("string.xml");
    //通過xml文件中的key獲取value
    const char *str1 = ((String*)chnStrings->objectForKey("string1"))->getCString();
    const char *str2 = ((String*)chnStrings->objectForKey("string2"))->getCString();
    const char *str3 = ((String*)chnStrings->objectForKey("string3"))->getCString();
    //創建一個標籤顯示出來


    Size winSize = Director::getInstance()->getWinSize();

    Label *label = Label::create(str1,"Arial", 48);
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章