先上代码:
bool Bug624Layer::init()
{
if(BugsTestBaseLayer::init())
{
auto size = Director::getInstance()->getWinSize();
auto label = Label::createWithTTF("Layer1", "fonts/Marker Felt.ttf", 36.0f);
label->setPosition(Vec2(size.width/2, size.height/2));
addChild(label);
Device::setAccelerometerEnabled(true);
auto listener = EventListenerAcceleration::create(CC_CALLBACK_2(Bug624Layer::onAcceleration, this));
_eventDispatcher->addEventListenerWithSceneGraphPriority(listener, this);
schedule(schedule_selector(Bug624Layer::switchLayer), 5.0f);
return true;
}
return false;
}
void Bug624Layer::switchLayer(float dt)
{
unschedule(schedule_selector(Bug624Layer::switchLayer));
auto scene = Scene::create();
scene->addChild(Bug624Layer2::create(), 0);
Director::getInstance()->replaceScene(TransitionFade::create(2.0f, scene, Color3B::WHITE));
}
bool Bug624Layer2::init()
{
if(BugsTestBaseLayer::init())
{
auto size = Director::getInstance()->getWinSize();
auto label = Label::createWithTTF("Layer2", "fonts/Marker Felt.ttf", 36.0f);
label->setPosition(Vec2(size.width/2, size.height/2));
addChild(label);
Device::setAccelerometerEnabled(true);
auto listener = EventListenerAcceleration::create(CC_CALLBACK_2(Bug624Layer2::onAcceleration, this));
_eventDispatcher->addEventListenerWithSceneGraphPriority(listener, this);
schedule(schedule_selector(Bug624Layer2::switchLayer), 5.0f);
return true;
}
return false;
}
void Bug624Layer2::switchLayer(float dt)
{
unschedule(schedule_selector(Bug624Layer::switchLayer));
auto scene = Scene::create();
scene->addChild(Bug624Layer::create(), 0);
Director::getInstance()->replaceScene(TransitionFade::create(2.0f, scene, Color3B::RED));
}
Bug624Layer::switchLayer()中是unschedule(schedule_selector(Bug624Layer::switchLayer));
为什么Bug624Layer2::switchLayer(float dt)中也是unschedule(schedule_selector(Bug624Layer::switchLayer));呢?Bug624Layer2::init()中是schedule(schedule_selector(Bug624Layer2::switchLayer), 5.0f);的,这对应不上呀。
虽然运行时都是正确的,但是为什么会这样呢,我把Bug624Layer2::switchLayer()改成"unschedule(schedule_selector(Bug624Layer2::switchLayer));"也是运行正确,到底怎样才是最正确的呢?