首页 > 代码库 > Cocos2d-x_3.2 Demo ----------TestScene类

Cocos2d-x_3.2 Demo ----------TestScene类

 1 class TestScene : public Scene 2 { 3 public:  4     TestScene(bool bPortrait = false, bool physics = false); 5     virtual void onEnter() override;// 进入场景事调用 6  7     virtual void runThisTest() = 0;// 运行场景需重写 8 }; 9 10 // C++ 1111 12 #define CL(__className__) [](){ return __className__::create();}13 #define CLN(__className__) [](){ auto obj = new __className__(); obj->autorelease(); return obj; }

这个类主要提供接口作用,主要是在菜单项点击后运行相应的场景。

 1 /* 分别初始化物理层和普遍层 */ 2 TestScene::TestScene(bool bPortrait, bool physics/* = false*/) 3 { 4     if (physics) 5     { 6 #if CC_USE_PHYSICS 7         TestScene::initWithPhysics(); 8 #else 9         Scene::init();10 #endif11     }12     else13     {14         Scene::init();15     }16 }

看注释估计读者都已经看懂了,所以这里也无需解释了。

 1 void TestScene::onEnter() 2 { 3     Scene::onEnter(); 4  5     // 添加回主菜单的菜单项 6     TTFConfig ttfConfig("fonts/arial.ttf", 20); 7     auto label = Label::createWithTTF(ttfConfig,"MainMenu"); 8     auto menuItem = MenuItemLabel::create(label, testScene_callback ); 9     10     auto menu = Menu::create(menuItem, nullptr);11     menu->setPosition( Vec2::ZERO );12     menuItem->setPosition( Vec2( VisibleRect::right().x - 50, VisibleRect::bottom().y + 25) );13 14     addChild(menu, 1);15 }

VisibleRect类请看这里http://www.cnblogs.com/studweijun/p/3973600.html

这个函数主要是写在测试的每个场景当中显示“MainMenu”其实就是返回主菜单,

看到上图右下角的MainMenu了吧,接下来我们来看一下他是怎么返回的(回调函数):

 1 void testScene_callback(Ref *sender ) 2 { 3     auto scene = Scene::create(); 4  5     auto layer = new TestController(); 6     scene->addChild(layer); 7     layer->release(); 8  9     Director::getInstance()->replaceScene(scene);10 11     cocostudio::ArmatureDataManager::destroyInstance();// 销毁骨骼动画数据12 }

TestCotroller类请看这里http://www.cnblogs.com/studweijun/p/3973555.html

实现的很简单,新建场景,然后TestController类又重新new了一次,再替换掉场景。

Cocos2d-x_3.2 Demo ----------TestScene类