cocos2d-x入门——场景显示分析

来源:互联网 发布:如何淘宝开企业店铺 编辑:程序博客网 时间:2024/04/28 10:04

精灵到视图中的显示

最近开始学习手游开发以阅读钟迪龙的《Cocos2d-x游戏开发之旅》开始。

对入门的Hello World的具体显示过程进行了认真阅读,得到了一点对场景显示过程的感悟,在此进行分析,希望跟大家一起分享!

显示共有三个组成部分:视图(View),场景(Scene),层(Layer)。他们进行显示必须遵循这样的逻辑:层添加到场景中,场景在视图中进行显示。这个逻辑秩序必须遵守。

有了这个逻辑,应该就掌握了显示的核心了,呵呵!

从CCLayer派生出层对象,将层对象通过场景对象的addChild函数添加到场景中,通过CCDirector的runWithScene,replaceScene等函数显示调入需要显示的场景。

那么我们需要显示文本标签CCLabel,按钮等怎么办呢?它们在cocos2d-x中都有一个响亮的名字:精灵。

无论你通过什么函数创建的精灵,都需要添加到对应显示的层中。

这里的层的概念相当于PS的图层。

下面我们HelloWorld分析其具体过程。

我们重点关注这几个文件:AppDelegate.cpp,AppDelegate.h,main.cpp, MyHelloWorldScene.cpp, MyHelloWorldScene.h

【1】MyHelloWorldScene.h中class MyHelloWorldScene : publicCCLayer{}可以说明MyHelloWorldScene其实不是真正的场景对象,它其实是层对象。

在层对象中的init函数中添加了需要显示的精灵。

bool MyHelloWorldScene::i nit() {

/* 以下代码是创建一个精灵并且添加到场景中 */

CCSprite* sprite = CCSprite::create("CloseNormal.png");

sprite->setPosition( ccp(200,200));

this->addChild(sprite);//钟迪龙说这里是添加到场景中操作,其实更真实的应该添加到层对象中,this为对象指针,代表是MyHelloWorldScene这个对象,因此事MyHelloWorldScene->addChild(),将精灵添加到层中。

return true;

}

【2】如何创建层并将层加入到场景中呢?这些操作也是在MyHelloWorldScene这个对象的scene()函数完成的。

CCScene* MyHelloWorldScene::sceneO {

/* 创建一个场景对象 */

CCScene* scene = CCScene::createO;//这是真正的场景

/* 创建 MyHelloWorldScene 层对象 */

MyHelloWorldScene * layer =MyHelloWorldScene::createO;//这里其实是通过CREATE_FUN宏实现的,并在宏中调用了init函数完成初始中的操作。

/* 添加 MyHelloWorldScene 层到场景中 */

scene->addChild(layer);

return scene;//返回一个场景对象

}

因此,可以看出在层对象中,实现了层到场景的转换,层对象的场景函数返回的是其所在的场景对象。

【3】最后通过导演实现将场景放到视图中进行最终的显示。在AppDelegate.cpp中,

bool AppDelegate::applicationDidFinishLaunchingO {

CCDirector*pDirector = CCDirector::sharedDirector();

pDirector->setOpenGL View(CCEGLView::sharedOpenGL ViewO);//这里调用了main.cpp中的相同的视图显示函数

pDirector->setDisplayStats(true);

pDirector->setAnimationInterval(1.0/60);

CCScene *pScene = HelloWorld::sceneO;//调用层对象的场景函数生成层所在的场景。

pDirector->run WithScene(pScene);//将场景送到导演的视图中进行显示

return true;

}

【4】如果在一个层中需要显示多个精灵,需要的就是创建精灵后将其添加到this-addChild();层中即可。

0 0