【已解决】当前活动场景的getTag丢失?

我先从第一个场景replaceScene到下一个场景:

void HelloWorld::play(Ref* pSender)
{
auto sc = Game::createScene();
auto tsc = TransitionSplitRows::create(1.0f, sc);
Director::getInstance()->replaceScene(tsc);
}

下一个场景设置了场景的setTag:
Scene* Game::createScene()
{
// ‘scene’ is an autorelease object
auto scene = Scene::create();

scene->setTag(TAG_GAME_SCENE);

auto mapLayer = MapLayer::create();
mapLayer->setTag(TAG_MAP_LAYER);
scene->addChild(mapLayer);

// ‘layer’ is an autorelease object
auto layer = Game::create();
// add layer as a child to scene
scene->addChild(layer);

// return the scene
return scene;
}

然后获取当前图层:

//根据标签获得图层
Layer* Util::layerWithTag(int tag)
{
//正在运行的场景
Scene* scene = Director::getInstance()->getRunningScene();

if (scene->getTag() == TAG_GAME_SCENE)
{
return (Layer*)scene->getChildByTag(tag);
}
return nullptr;
}

scene->getTag()这个取出来的是 -1
取不到当前正在运行的场景?

如果不从HelloWorld跳转Game,直接运行Game就是正常的。

其实楼主是想法是正确的,但是可能gettag用错了地方了。

如果是在Game的init方法中去获取,那获取到的会是前一个scene的tag,而不是Game的scene。因为这个时候scene还没有返回。我贴段代码。

bool Scene1::init()
{
    //////////////////////////////
    // 1. super init first
    if ( !Layer::init() )
    {
        return false;
    }
    
    log("xxxx....%d",Director::getInstance()->getRunningScene()->getTag());//-1
    
    Director::getInstance()->getScheduler()->schedule(](float){
        log("xxxx....%d",Director::getInstance()->getRunningScene()->getTag());//Real Tag
    }, this, 0.0, 0, 2.0f, !this->isRunning(), "lambda");
    
    return true;
}
```

非常感谢,困扰了几天的疑问总算知道是怎么回事了。感谢能抽空解惑!
正是在Game的init里获取MapLayer时有个当前活动场景的判断。