cocos2d-x 3.0 Node节点层次BUG

在cocos2d-x3.0 Node中优化的对子节点的排序,采用了STL的排序std::sort( std::begin(_children), std::end(_children), nodeComparisonLess );
sort这个排序中在大数据会使用快速排序法
快速排序不是一种稳定的http://baike.baidu.com/view/297739.htm,也就是说,多个相同的值的相对位置也许会在算法结束时产生变动。
所以动态在插入节点到node时,如果这个node 的节点_localZOrder 都是相同,就会出现重新排序时出错,
这个问题我在android手机上出现
nodeComparisonLess 这个函数的实现如下
bool nodeComparisonLess(Node* n1, Node* n2)
{
return( n1->getLocalZOrder() < n2->getLocalZOrder() ||
( n1->getLocalZOrder() == n2->getLocalZOrder() && n1->getOrderOfArrival() < n2->getOrderOfArrival() )
);
}

另外个变量_orderOfArrival 在每次渲染后都会设为0

解决的办法就是在visitt把_orderOfArrival = 0 这句话注释掉

= =第一次写东西,表示不是很明确

已做反馈,请等待回复。:14:

你是怎么做的导致出问题?
出问题后的表现是?

不过你说的有道理。每帧都把_orderOfArrival设置为0的话,那么排序变成就只和可能不一样了。

我已经提交了一个pull request
欢迎讨论
https://github.com/cocos2d/cocos2d-x/pull/6138