场景就是游戏的不同状态,如游戏菜单、游戏关卡等等。而场景的切换由导演类CCDirector来完成,通常我们使用replaceScene(CCScene *pScene)函数来切换场景。为了方便我使用上一节的项目,新建一个场景GameScene类和一个图层GameLayer类。
//GameScene.h #pragma once #include "cocos2d.h" //使用VS类向导添加,需要手工添加这句 class GameScene : public cocos2d::CCScene { public: GameScene(void); ~GameScene(void); }; //GameScene.cpp #include "GameScene.h" GameScene::GameScene(void) {} GameScene::~GameScene(void) {} //GameLayer.h #pragma once #include "cocos2d.h" class GameLayer : public cocos2d::CCLayer { public: GameLayer(void); ~GameLayer(void); }; //GameLayer.cpp #include "GameLayer.h" using namespace cocos2d; //添加命名空间,要不然引擎的类如CCSize才能使用 GameLayer::GameLayer(void) { //获得屏幕的大小 CCSize size = CCDirector::sharedDirector()->getWinSize(); //创建一行文本并设置位置在屏幕中间 CCLabelTTF* pLabel= CCLabelTTF::create("Game Scene.", "Arial",30); pLabel->setPosition(ccp(size.width/2,size.height/2)); //将这行文本添加到布景中 addChild(pLabel);
CCSprite* pSprite = CCSprite::create("water.png");
pSprite->setPosition(ccp(size.width/2,size.height/2+80));
addChild(pSprite);
} GameLayer::~GameLayer(void) { }
然后修改图片菜单的回调函数如下:
void HelloWorld::menuPlayCallback(CCObject* pSender) { CCLOG("menuPlayCallback"); //实例化一个场景和图层,并将图层添加到场景中 CCScene* pScene=new GameScene(); //需要引入头文件哈 CCLayer* pLayer=new GameLayer(); pScene->addChild(pLayer,0); //使用淡入淡出效果切换场景 CCDirector::sharedDirector()->replaceScene( CCTransitionFade::create(2, pScene)); //释放 pLayer->release(); pScene->release(); }
OK场景切换代码写完了,看看运行效果: