在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 这句话注释掉
= =第一次写东西,表示不是很明确
