您的位置:首页 > 移动开发 > Cocos引擎

cocos2dx场景切换小例子

2014-03-08 21:52 267 查看
环境:cocos2d.x.version: 2.2.1   +  vs2010

目的:HelloWorld程序中,已经有了一个场景,现在自己加一个场景,两个场景来回切换,可以加任何渐变效果。

方法一,不用create函数:

首先建一个自定义层:

class TestLayer1 : public CCLayer
{
public:
TestLayer1(void);
~TestLayer1(void);
void nextCallback(CCObject* pSender);
}; 在层的构造函数中可以放置该层要用的所有内容,比如背景图,然后放一个按钮,可以用菜单来实现:
// menu
CCMenuItemImage *item1 = CCMenuItemImage::create("anniu.png", "anniu.png", this, menu_selector(TestLayer1::nextCallback) );

CCMenu *menu = CCMenu::create(item1, NULL);

menu->setPosition( CCPointZero );
item1->setPosition(230,50);
addChild(menu, 1);

      将点击按钮的回调函数放到菜单项的参数中。在按钮的回调函数中切换场景,这里是当场景为TestLayer1时切回HelloWorld主场景:
void TestLayer1::nextCallback(CCObject* pSender)
{
CCScene* s = new CCScene();

CCLayer* pLayer = new HelloWorld();
pLayer->init();

s->addChild(pLayer);
CCScene* pScene = CCTransitionFadeDown::create(1.2f, s);//创建渐变模式

pLayer->release();
s->release();

if (pScene)
{
CCDirector::sharedDirector()->replaceScene(pScene);//切换场景
}
}

CCTransitionXXXXX有很多种效果,换个名字即可。使用new方法时注意要手工release。
同理,在HelloWorld的初始化函数中加一个按钮和回调函数,回调函数中将场景从HelloWorld切换到自定义的TestLayer1:

void HelloWorld::nextCallback(CCObject* pSender)
{
CCScene* s = new CCScene();

CCLayer* pLayer = new TestLayer1();
s->addChild(pLayer);

CCScene* pScene = CCTransitionFadeDown::create(1.2f, s);
s->release();
pLayer->release();
if (pScene)
{
CCDirector::sharedDirector()->replaceScene(pScene);
}
}方法二,模仿源代码使用create函数:
将自定义层作如下更改:

class TestLayer1 : public CCLayer
{
public:
TestLayer1(void);
~TestLayer1(void);

//将初始化放在这里
virtual bool init();
//模仿源代码
static CCScene* scene();
void nextCallback(CCObject* pSender);

CREATE_FUNC(TestLayer1);
}; 其中scene函数的实现与HelloWorld中的实现大致相同,作用是创建新场景和新的TestLayer1层,由于使用Create函数创建,所以已将产生的对象添加到自动释放的对象中,不用手动release。
CREATE_FUNC宏就是自动生成Create函数的宏。

回调函数简化为:

CCScene* s = HelloWorld::scene();
CCScene* pScene = CCTransitionFadeDown::create(1.2f, s);//创建渐变模式

if (pScene)
{
CCDirector::sharedDirector()->replaceScene(pScene);//切换场景
} HelloWorld类不需要改变,只需要简化回调函数:
CCScene* s = TestLayer1::scene();
CCScene* pScene = CCTransitionFadeDown::create(1.2f, s);//创建渐变模式
if (pScene)
{
CCDirector::sharedDirector()->replaceScene(pScene);
}
以上。

(ps:为什么没有见HelloWorld类的构造和析构函数?使用第二种方法,删除了构造析构确实可以,但Create里面不是也new了吗?内部有点什么还不明白)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  cocos2dx