cocos2d-x学习笔记(5)-- CCScene场景的切换
2012-08-06 22:50
561 查看
cocos2d-x学习笔记(5)-- CCScene场景的切换本文出自http://www.wenbanana.com稻草人博客,欢迎访问!step1:创建一个cocos2d-win32 application,并命名为simpleGame;step:为了代码的整洁,我把上一节中的山和太阳这两个背景合为一个背景---LayerDay(白天),同时将山和月亮合并为NightLayer夜景(晚上)效果如下两张图白天:晚上:在HelloWorldScene.h中添加LayerDay 、LayerNight和MyScene三个类:
/************************************************************************//* 白天的背景 *//************************************************************************/class LayerDay:public CCLayerColor{public:LayerDay();~LayerDay();public:virtual void onEnter();};/************************************************************************//* 晚上的背景 *//************************************************************************/class LayerNight:public CCLayerColor{public:LayerNight();~LayerNight();public:virtual void onEnter();};/************************************************************************//* 自定义场景 *//************************************************************************/class MyScene:public CCScene{public:MyScene();public:virtual void onEnter();virtual void runThisTest();void daySceneCallback(CCObject* pSender);void nightSceneCallback(CCObject* pSender);};在HelloWorldScene.cpp中修改HelloWorld::scene()如下:
CCScene* HelloWorld::scene(){CCScene * scene = NULL;do{// 'scene' is an autorelease objectscene = new MyScene();CC_BREAK_IF(! scene);// 'layer' is an autorelease object//HelloWorld *layer = HelloWorld::node();LayerDay* pLayer = new LayerDay();// add layer as a child to scene//addChild中的第二个参数为背景的次序,LayerHill在LayerCloud的上面,即表面。scene->addChild(pLayer,0);} while (0);// return the scenereturn scene;}然后添加三个类的成员函数:
/************************************************************************//* class LayerNight *//************************************************************************/LayerNight::LayerNight(){CCSize size = CCDirector::sharedDirector()->getWinSize();this->initWithColor(ccc4(0,0,0,255));CCSprite* pSpriteNight = CCSprite::spriteWithFile("night.png");CCSprite* pSpriteHill = CCSprite::spriteWithFile("hill.png");pSpriteNight->setPosition(ccp(size.width/2,size.height/2));pSpriteHill->setPosition(ccp(size.width/2,size.height/2));addChild(pSpriteNight);addChild(pSpriteHill);}LayerNight::~LayerNight(){}void LayerNight::onEnter(){CCLayer::onEnter();}/************************************************************************//* class LayerDay *//************************************************************************/LayerDay::LayerDay (){this->initWithColor(ccc4(255,255,255,255));CCSize size = CCDirector::sharedDirector()->getWinSize();CCSprite* pSpriteHill = CCSprite::spriteWithFile("hill.png");CCSprite* pSpriteCloud = CCSprite::spriteWithFile("cloud.png");pSpriteCloud->setPosition(ccp(size.width/2,size.height/2));pSpriteHill->setPosition(ccp(size.width/2,size.height/2));addChild(pSpriteCloud);addChild(pSpriteHill);}LayerDay ::~LayerDay (){}void LayerDay ::onEnter(){CCLayer::onEnter();}/************************************************************************//* 自定义场景 *//************************************************************************/MyScene::MyScene(){CCScene::init();CCLabelTTF* labelDay = CCLabelTTF::labelWithString("Day", "Arial",20);CCLabelTTF* labelNight = CCLabelTTF::labelWithString("Night", "Arial",20);CCMenuItemLabel* pMenuDayItem = CCMenuItemLabel::itemWithLabel(labelDay, this,menu_selector(MyScene::daySceneCallback));CCMenuItemLabel* pMenuNightItem = CCMenuItemLabel::itemWithLabel(labelNight, this,menu_selector(MyScene::nightSceneCallback));CCMenu* pMenuDay = CCMenu::menuWithItems(pMenuDayItem, NULL);CCMenu* pMenuNight = CCMenu::menuWithItems(pMenuNightItem, NULL);CCSize size = CCDirector::sharedDirector()->getWinSize();pMenuDayItem->setPosition(ccp(size.width/2 - 40, 30));pMenuNightItem->setPosition(ccp(size.width/2 + 40, 30));pMenuDay->setPosition(CCPointZero);pMenuNight->setPosition(CCPointZero);addChild(pMenuDay,2);addChild(pMenuNight,2);}void MyScene::daySceneCallback(CCObject *pSender){CCScene* scene =new MyScene();CCLayer* pLayer = new LayerDay();scene->addChild(pLayer, 0);CCDirector::sharedDirector()->pushScene(scene);scene->release();pLayer->release();}void MyScene::nightSceneCallback(CCObject* pSender){CCScene* scene =new MyScene();CCLayer* pLayer = new LayerNight();scene->addChild(pLayer, 0);CCDirector::sharedDirector()->pushScene(scene);scene->release();pLayer->release();}void MyScene::onEnter(){CCScene::onEnter();}void MyScene::runThisTest(){CCLayer* pLayer = new LayerNight();addChild(pLayer);pLayer->release();CCDirector::sharedDirector()->replaceScene(this);}step3:编译运行程序,就会出现如下画面,通过点击画面上的 "Day"和"Night"两个字样,就可以对场景进行切换。但是,场景在切换时给人感觉很生硬,要想让场景间过度得更更自然、更绚丽,我们在HelloWorldScene.cpp中对代码做一些修改:首先添加CCTransitionScene* createTransition(cocos2d::ccTime t, CCScene* s){return CCTransitionFadeUp::transitionWithDuration(t, s);//此处是场景切换时的效果//return CCTransitionFadeDown::transitionWithDuration(t, s);//return CCTransitionTurnOffTiles::transitionWithDuration(t, s);//return CCTransitionSplitRows::transitionWithDuration(t, s);//return CCTransitionSplitCols::transitionWithDuration(t, s);//......}再次运行程序,这次效果是不是好多了呢!源代码下载地址:http://download.csdn.net/download/wen294299195/4525796
相关文章推荐
- Cocos2D-X学习笔记 3 从一个场景切换到还有一个场景
- cocos2d-x-3.0rc1 学习笔记4(场景切换2)
- cocos2d-x学习笔记(3)场景切换
- Cocos2d-x学习笔记(八)场景切换原理分析
- cocos2d-x 菜鸟学习笔记四(游戏场景与场景切换)
- 【Cocos2d-X开发学习笔记】第04期:渲染框架之场景类(CCScene)的使用
- 【Cocos2d-X开发学习笔记】第04期:渲染框架之场景类(CCScene)的使用
- cocos2d-x学习笔记04:CCScene场景切换
- cocos2d-x学习笔记(二)--场景切换
- 【麦可网】Cocos2d-X跨平台游戏开发学习笔记---第二十课:Cocos2D-X场景切换1-3
- Cocos2d-x学习笔记(四)-------->场景切换
- 【Cocos2d-x 3.0学习笔记】场景切换
- IOS cocos2d学习笔记-<七>CCTransitionScene场景切换动画
- cocos2d-x学习笔记4 场景的切换
- Cocos2d-x学习笔记(五)实例——场景切换
- cocos2d-x-3.0rc1 学习笔记3(场景切换)
- Cocos2d-x学习笔记(九)实例——场景自动切换
- cocos2d学习之tests实例场景切换(1)
- cocos2d-x 3.1.1 step by step 学习笔记7 场景与层
- 【Cocos2D学习】Lua——动画动作、场景切换的基本应用