cocos2d-x系列笔记(3)---场景

场景(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函数进行场景的切换


关于场景,我们讲到这里,下次我们会在场景中加一个会动的精灵.

你可能感兴趣的:(cocos2d-x系列笔记(3)---场景)