游戏中经常会发现场景之间的切换,今天就来谈谈cocos2d-x是怎样实现场景中的切换的。
scene_1.h:
scene_1.c:
//初始化
好吧,还是用一个例子来说明一下;我们先来创建两个不同场景
(ps:两个场景的代码差不多只是背景图片的不同,所以这里就只写出第一个场景的代码)
scene_1.h:
#ifndef _SCENE_1_H_
#define _SCENE_1_H_
#pragma once
#include "cocos2d.h"
using namespace cocos2d;
class scene_1 : public CCLayer
{
public:
virtual bool init();
static cocos2d::CCScene* scene();
void ItemScene2Callback(CCObject* pSender);
CREATE_FUNC(scene_1);
};
#endif
scene_1.c:
#include "scene_1.h"
#include "scene_2.h"
//创建场景
CCScene scene_1::scene()
{
CCScene *scene = CCScene::create();
scene_1 *layer = scene_1::create();
scene->addChild(layer);
return scene;
}
//初始化
bool scene_1::init()
{
if ( !CCLayer::init() )
{
return false;
}
CCSize size = CCDirector::sharedDirector()->getVisibleSize();
CCSprite *background = CCSprite::create("g.png");
background->setPosition(ccp(size.width/2,size.height/2));
this->addChild(background);
CCMenuItemImage *ItemScene2 = CCMenuItemImage::create(
"scene2Item.png",
"scene2Item.png",
this,
menu_selector(scene_1::ItemScene2Callback));//在按钮回调函数中实现场景切换
ItemScene2->setPosition(ccp(100,100));
CCMenu *pMenu = CCMenu::create(ItemScene2,NULL);
pMenu->setPosition(CCPointZero);
this->addChild(pMenu,0);
return true;
}
//点击按钮的回调函数
void scene_1::ItemScene2Callback(CCObject* pSender)
{
//用replaceScene切换场景,是用参数里的场景替换当前活动的场景
CCDirector::sharedDirector()->replaceScene(scene_2::scene());
/******************************************************************
//跟上面的函数一样,不过加多了一个场景切换的效果,切换效果有很多种,读者可以自己去试试
CCDirector::sharedDirector()->replaceScene(CCTransitionSlideInT::create(1, scene_2::scene());
//用replaceScene是把当前活动场景压入一个队列,运行参数里的场景;
CCDirector::sharedDirector()->pushScene(scene_2::scene());
//跟上面的函数一样,也只是加多了场景切换效果
CCDirector::sharedDirector()->pushScene(CCTransitionSlideInT::create(1, scene_2::scene());
***********************************************************************/
}
如果scene_1中用的是pushScene压入队列的方式,那么在scene_2中de 按钮点击回调函数就要注意了,可以用
CCDirector::sharedDirector()->popScene();
从队列中弹出scene_1继续来运行从而实现场景切换;
这样关于场景切换的小小实现就完成,希望对大家有帮助