场景(Scene)与层(Layer)在cocos2d-x中是两个抽象的概念.他们不会在画面上显示任何可视化的东西,却可以帮助我们更好的管理游戏对象.一个游戏场景中CCScene往往是第一个节点,而CCScene的第一层子结点一定是CCLayer的子类.通常CCScene不保存游戏里的任何对象,而是由它的子节点去保存.这样场景中不包含任何游戏的代码,所以我们可以看到cocos2d-x的示例代码中,并没有继承CCScene类的代码,而是在CCLayer的子类的静态方法scene中创建了CCScene对象.
下面我们参照cocos2d-x demo的方式创建了另外一个场景.
CCScene* Scene1::scene() { CCScene* scene = NULL; do { //由CCScene类静态函数create创建一个场景对象 scene = CCScene::create(); CC_BREAK_IF(!scene); //凡是由cocos2d的create函数创建的对象都可以自动释放 //不必手动释放内存 Scene1* layer = Scene1::create(); CC_BREAK_IF(!layer); scene->addChild(layer,1); }while(0); return scene; }
Scene1类继承了CCLayer类
do{}while(0)与 CC_BREAK_IF的用法可参考我的另外一篇文章cocos2d-x系列笔记技巧篇(1).
在Scene1类的初始化函数init()中,我们增加了一个背景
bool Scene1::init() { bool bRet = false; do { CCSize size = CCDirector::sharedDirector()->getWinSize(); CC_BREAK_IF(!CCLayer::init()); //增加背景图片 CCSprite* background = CCSprite::create("HelloWorld.png"); CC_BREAK_IF(!background); background->setScale(0.5f); background->setPosition(ccp(size.width/2,size.height/2)); this->addChild(background); bRet = true; }while(0); return bRet; }
当我们需要切换背景的时候可用下面的代码切换.
CCScene* scene1 = Scene1::scene(); //获得Scene的CCScene对象 CCDirector::sharedDirector()->replaceScene(scene1); //用replaceScene函数进行场景的切换
关于场景,我们讲到这里,下次我们会在场景中加一个会动的精灵.