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
- cocos2dx场景切换小例子
- cocos2dx场景切换动画
- cocos2dx场景切换动画
- cocos2dx 场景切换动画
- cocos2dx之场景切换
- --cocos2dx场景切换--
- cocos2dx切换场景
- Cocos2dx 场景自动切换
- COCOS2DX场景切换特效
- cocos2dx 场景切换特效
- cocos2dx场景切换动画
- cocos2dx 场景切换顺序
- cocos2dx 场景切换动画效果
- cocos2dx场景切换内存问题
- cocos2dx 33种场景切换
- Cocos2dx场景切换效果汇总
- cocos2dx场景间切换效果
- cocos2dx-33种场景切换
- 作业3
- Learning the parts of object by NMF
- HDU 1576 A/B
- <<OCM实验选讲>> 第五课 数据备份恢复实验
- Struts2标签
- cocos2dx场景切换小例子
- JVM调优分享-(概要+例子)
- dede用户登录时,跳转到提示页时报404错误
- opencv 关于 cvCalcHist的含义(1)
- unix高级环境编程 例子 代码实现练习 第七章:进程环境
- 序言
- 二叉树的层次遍历
- ARCH UEFI 想说爱你不容易
- 计科1111-1114班第一周讲义、课外作业(截止日期:2014年3月12日23点-周三晚,学委飞信通知同学)