ssize_t SpriteBatchNode::rebuildIndexInOrder(Sprite *parent, ssize_t index) { CCASSERT(index>=0 && index < _children.size(), "Invalid index"); auto& children = parent->getChildren(); for(const auto &child: children) { Sprite* sp = static_cast<Sprite*>(child); if (sp && (sp->getLocalZOrder() < 0)) { index = rebuildIndexInOrder(sp, index); } } // ignore self (batch node) if (parent != static_cast<Ref*>(this)) { parent->setAtlasIndex(index); index++; } for(const auto &child: children) { Sprite* sp = static_cast<Sprite*>(child); if (sp && (sp->getLocalZOrder() >= 0)) { index = rebuildIndexInOrder(sp, index); } } return index; }
unsigned int CABatchView::rebuildIndexInOrder(CAView *superview, unsigned int uIndex) { const CAVector<CAView*> pVector = superview->getSubviews(); CAVector<CAView*>::const_iterator itr=m_obSubviews.begin(); while (itr!=m_obSubviews.end()) { CC_BREAK_IF((*itr)->getZOrder() >= 0); uIndex = rebuildIndexInOrder((*itr), uIndex); itr++; } if (!superview->isEqual(this)) { superview->setAtlasIndex(uIndex); uIndex++; } while (itr!=m_obSubviews.end()) { uIndex = rebuildIndexInOrder((*itr), uIndex); } return uIndex; }
unsigned int CCSpriteBatchNode::rebuildIndexInOrder(CCSprite *pobParent, unsigned int uIndex) { NSMutableArray<CCNode*> *pChildren = pobParent->getChildren(); if (pChildren && pChildren->count() > 0) { CCSprite *pSprite; NSMutableArray<CCNode*>::NSMutableArrayIterator iter; for (iter = pChildren->begin(); iter != pChildren->end(); ++iter) { pSprite = (CCSprite*)(*iter); if (! pSprite) { break; } if (pSprite->getZOrder() < 0) { uIndex = rebuildIndexInOrder(pSprite, uIndex); } } } // ignore self (batch node) if (! pobParent->isEqual(this)) { pobParent->setAtlasIndex(uIndex); uIndex++; } if (pChildren && pChildren->count() > 0) { CCSprite *pSprite; NSMutableArray<CCNode*>::NSMutableArrayIterator iter; for (iter = pChildren->begin(); iter != pChildren->end(); ++iter) { pSprite = (CCSprite*)(*iter); if (! pSprite) { break; } if (pSprite->getZOrder() >= 0) { uIndex = rebuildIndexInOrder(pSprite, uIndex); } } } return uIndex; }