三,Cocos2d游戏逻辑架构

来源:互联网 发布:linux mtp挂载 编辑:程序博客网 时间:2024/05/21 21:34

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


<span style="font-size:14px;">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;}</span>

1,CCDirector

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

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

//helloWorldScene.hclass HelloWorld : public cocos2d::CCLayer{public:        virtual bool init();     <span style="background-color: rgb(255, 204, 204);"> static cocos2d::CCScene* scene();</span>        void menuCloseCallback(CCObject* pSender);        CREATE_FUNC(HelloWorld);};
static cocos2d::CCScene* scene();
//HelloWorld.cppCCScene* 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

<span style="font-family:Microsoft YaHei;font-size:14px;"></span>

首先,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中的。


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



0 0
原创粉丝点击