cocos2dx场景切换小例子

来源:互联网 发布:网络ip地址怎么修改 编辑:程序博客网 时间:2024/05/17 03:47

环境: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了吗?内部有点什么还不明白)







0 0
原创粉丝点击