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);
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章