EventDispatcher::dispatchEventToListeners里有个断言,出现了必然触发的情况

CCASSERT(listeners->getGt0Index() <= static_cast<ssize_t>(fixedPriorityListeners->size()), “Out of range exception!”);

触发断言时 listeners->getGt0Index() 是 2
static_cast<ssize_t>(fixedPriorityListeners->size()) 是 1

在一个过程中必现,没找到原因,由于是工作上的代码,不能直接给出,这个过程涉及的代码也挺多的,不知道怎么简化

暂时我先用
if(listeners->getGt0Index() > static_cast<ssize_t>(fixedPriorityListeners->size()))
{
listeners->setGt0Index(static_cast<ssize_t>(fixedPriorityListeners->size()));

}

把断言替换掉了

期待大神们找到bug在哪

由于加班到这个点了,白天可能在睡觉,如果需要交流的话,晚上我会来看看的

参照github上的最新版修改过CCEventDispatcher.cpp这个文件,
就是把void EventDispatcher::updateListeners(Event* event) 里的

if(_inDispatch> 1)
return;
往前挪了点(虽然不理解为啥,赶工中,没太多时间看)

但是bug依然存在,而我的工程中对于Priority>=0的情况区分不敏感,所以就先这么处理了

触发断言的都是touch事件,我给touch事件设置了priority的只有一个类A,触发断言都是如下情况
发生在Scene1中有A1,然后replaceScene到scene2,然后scene2上有A2,这个时候再来一次touch就触发断言了(Scene1依然存在,但是A1释放了)