3.4版本,replacescene之后,另一个场景事件还在

         auto i_begin=Sprite::createWithSpriteFrameName("begin.png");
    auto i_begin2=Sprite::createWithSpriteFrameName("begin2.png");
    auto uiStartBtn=MenuItemSprite::create(i_begin,i_begin2,i_begin2,this,menu_selector(MenuScene::menuStartCallback));
    uiStartBtn->setPosition(Vec2(visibleSize.width*0.1f,visibleSize.height*0.7f));


```

上面是按钮的代码
void MenuScene::menuStartCallback(cocos2d::Object* pSender){
    //tansform to MenuScene
    auto transformScene=CCTransitionSlideInL::create(1.5f,MainScene::playGame());
    Director::getInstance()->replaceScene(transformScene);
}


```

上面跳转的代码
在新场景中我所有的按钮事件还在,这是为什么?前面的内存都没有释放掉吧?是不是我按钮事件加的方式不对?

怎么在场景切换之间调用一个onexit之类的函数来手动释放原场景的内存呢?

问题应该不在这里吧···
是不是原来的Scene你另外保存未清除,导致自动回收不生效?

我应该没有另外保存啊

我在退出事件onExit()函数加入一个诸如
pSprite->release()
的代码,程序就出错了

调试下呗。
加个数据断点,看看MenuScene的ref数变化。

感觉你对cocos2d-x内存模型理解有偏差····具体你可以搜下文章看看,这里有一篇不错的。
http://blog.leafsoar.com/archives/2013/06-04.html

Node::onExit()是node从parent上卸除时调用的,不是删除时调用的。而且sprite这种,一般情况下你不会手动调用到release的····即使需要retain/release,这事也应该由RefPtr来做。

为什么我的事件还在?
我现在的解决方式是在onExit()里面把按钮禁用,这样事件是没问题了,但是理论上menuscene不是应该在replace之后内存就释放了吗

第一:奇怪你的按钮怎么加的,如果按钮挂载在之前的scene下,现在切换了scene,又怎么会出现在新的scene里面?
第二:scene的内存不应该是手动管理的。Replacescene之后如果没有其他地方引用,当然会被释放掉。

1.我的按钮并没有出现在其他scene,只是在相同位置上,我点击了有事件
2.就是说啊,我也想他自动释放掉,我的scene要么没有释放,要么就是释放不完全,事件还残留了