场景切回后,无法响应触摸的bug

使用早上更新了最近代码编译后的player,进入A场景,然后replace B场景,再replace回A场景,此时A场景里所有child都无法响应touch了。看了下源码,应该是在替换场景时,A场景执行了cleanUp方法

void CCScene::cleanup(void)
{
    m_touchableNodes->removeAllObjects();
    m_touchingTargets->removeAllObjects();
    CCDirector::sharedDirector()->getTouchDispatcher()->removeDelegate(this);
    CCLayer::cleanup();
}


```

其中CCDirector::sharedDirector()->getTouchDispatcher()->removeDelegate(this);将触摸事件给注销额。。。
测试代码如下
 scripts.zip (3 KB)

恩 发现了。

难道木有其他人遇到这样的问题嘛?

我游戏就1个场景,都是用的layer进行切换,但是我安卓按了home后在回游戏,有很大几率失去响应事件,但不是每次,htc和小米都这样,同求解决

用法有问题吧

切换场景用
app:enterScene(“AScene”)

不用require也不用retain吧

场景切换大致有两种思路:
1.A切到B,将A从内存移除,B切回A,将B从内存移除,生成一个新的A。
2.A切到B,将A存在内存中,B切回A,将B存在内存中,之前的A添加到舞台。
两种思路没有绝对的对错,看应用的场合,所以不存在“用法有问题”,也不存在“不用require也不用retain吧”,你看看app:enterScene的实现就知道其实就是require了一次,然后new了一个新的table。
假设说我就是想使用第2条思路,那么再次添加到舞台上的A场景就无法响应触摸了。

你是对的,

如果要用第二种,那就不应该用replace吧,
我看CCDirector中有pushScene,
display中没有封装pushScene,直接调director试下吧

嗯。。。其实吧把CCScene中cleanUp方法中的CCDirector::sharedDirector()->getTouchDispatcher()->removeDelegate(this); 给注释掉,也是可以的。反正也就是三个场景切来切去,而且又是经常用到的场景实例。。。