【已解决】切换场景2后,再切换回场景1,场景1的触摸监听错乱。。

我的初始场景是场景1,在场景1中我设置了触摸事件监听
cocos2d::EventListenerTouchOneByOne* listener1;

然后我用replaceScene切换到场景2,再切换回场景1,结果场景1的触摸监听就错乱了,请各位告知为何?

两个各自继承了触摸?

场景1切换出去的时候有没有将触摸监听取消。

谢谢两位的回答 我已经发现问题了,是我将一个指针设置为static了。

没有取消,但是后来发现不是这个问题。3.x当中需要取消吗?

3.0中需要取消啊,写到析构函数中,否则会出现问题的。

因为我看3.0里面的listener是通过静态函数create()构建的,然后通过_eventDispatcher::add…来加入父节点的,我想它应该会在父类expire的时候自动释放吧?

_eventDispatcher->addEventListenerWithSceneGraphPriority(mouse_listener,this);这里的第二个参数是this,如果你没有在析构函数中释放掉监听器,但是this已经null了啊,等到事件分发的时候不就错了吗?

我想你是对的。。我又看了下之前的一篇文章,里面提到_eventDispatcher是Node的一个属性,同时也是单例类,从Director::getInstance()->getEventDispatcher()中获取。我一直以为_eventDispatcher是随着Node的消亡而消亡的呢。。。

奇怪我没有在destructor中remove也没出错。。今天回家再看看。

应该说是_eventDispatcher确实是随着Node的消亡而消亡,但是它只是类似于一个指针或引用吧,Director::getInstance()->getEventDispatcher()是从头到尾存在着的。

不对,
以下是原文:
另外,有一点非常重要,FixedPriority listener添加完成之后需要手动remove,而SceneGraphPriority listener是跟node绑定的,在node的析构函数中会被移除。