三,Cocos2d游戏逻辑架构

我们以Helloworld工程为例,如图所示:

三,Cocos2d游戏逻辑架构_第1张图片

bool AppDelegate::applicationDidFinishLaunching() {
    // initialize director
    CCDirector* pDirector = CCDirector::sharedDirector();
    CCEGLView* pEGLView = CCEGLView::sharedOpenGLView();

    pDirector->setOpenGLView(pEGLView);
	
    // 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);

    // create a scene. it's an autorelease object
    //CCScene *pScene = HelloWorld::scene();
	CCScene* pScene = AnchorPoint::scene();
    // run
    pDirector->runWithScene(pScene);

    return true;
}

1,CCDirector

游戏的一开始,初始化CCDirector,代码中,设置fps, 设置层(pScene), 最后runWithScene,运行场景。在游戏中,比如设置关卡等等,未进入游戏地图或者场景之前的之前的设置。

代码中,CCScene *pScene = HelloWorld::scene();这里的先将Helloworld理解为一个层, HelloWorld::scene()中创建了scene,然后返回CCScene类型的指针,将该指针交给导演,导演第一次运行这个scene,所以用runWithScene,HelloWorld是怎样变成一个层的?

//helloWorldScene.h
class HelloWorld : public cocos2d::CCLayer
{
public:
    
    virtual bool init();  

    static cocos2d::CCScene* scene();
    
    void menuCloseCallback(CCObject* pSender);
    
    CREATE_FUNC(HelloWorld);
};
static cocos2d::CCScene* scene();
//HelloWorld.cpp
CCScene* HelloWorld::scene()
{
    // 'scene' is an autorelease object
    CCScene *scene = CCScene::create();
    
    // 'layer' is an autorelease object
    HelloWorld *layer = HelloWorld::create();

    // add layer as a child to scene
    scene->addChild(layer);

    // return the scene
    return scene;
}

2,CCSene

首先,HelloWorld是继承与CCLayer,所以它具备层的属性,HelloWorld的本质也就是一个层,在.cpp中写了scene的创建,scene是由SSCene中的create创建的,因为Helloworld已经是层了,所以直接调用HelloWorld中的create,创建层,scene->addChild(layer); 将这个创建好的层加到这个scene中, 并且返回scene,也就是我们在AppDelegate中使用到的scene。

在.h中的CREATE_FUNC(HelloWorld);这是一个宏定义的函数。其中,new了一个HelloWorld的内存,用该指针纸箱CCLayer中的init(), 之前已经讲过,HelloWorld继承了CCLayer,(子类指针指向父类方法)主要完成HelloWorld对象的构造和初始化;

3,CCLayer

场景中有不同的层,在游戏中,我们可以将精灵(主角,障碍,背景等)加到不同的层中。CCLayer是被加载到CCSene中的。

在Helloworld::init()中,直接使用CCLayer::init()(其实在创建HelloWorld时,我们已经完成CCLayer的init了吧), 层创建成功后,借助CCDirector获取屏幕的大小,创建精灵, 设置精灵位置等;

4,CCSprite

精灵就是游戏中所具备元素,比如主角,怪物,障碍等, 精灵是被加到层上的,CCSprite是被加载到CCScene中的。


一个导演同一时间只能运行一个场景, 一个场景当中, 可以同时加载多个层,一个层同时可以加载多个精灵,并且层中也可以加载层。



你可能感兴趣的:(Cocos2d-X)