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++ 11 11 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 #endif 11 } 12 else 13 { 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了一次,再替换掉场景。
时间: 2024-12-19 10:57:59