场景(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函数进行场景的切换
关于场景,我们讲到这里,下次我们会在场景中加一个会动的精灵.