void Sprite::addChild(Node *child, int zOrder, const std::string &name) { CCASSERT(child != nullptr, "Sprite::addChild-->child must be non-nullptr"); if (child == nullptr) { return; } if (_batchNode) { Sprite* childSprite = dynamic_cast<Sprite*>(child); CCASSERT( childSprite, "CCSprite only supports Sprites as children when using SpriteBatchNode"); CCASSERT(childSprite->getTexture()->getName() == _textureAtlas->getTexture()->getName(), "childSprite's texture name should be equal to _textureAtlas's texture name."); //put it in descendants array of batch node _batchNode->appendChild(childSprite); if (!_reorderChildDirty) { setReorderChildDirtyRecursively(); } } //CCNode already sets isReorderChildDirty_ so this needs to be after batchNode check Node::addChild(child, zOrder, name); }
// helper used by reorderChild & add void CAView::insertSubview(CAView* subview, int z) { CCAssert( subview != NULL, "Argument must be non-nil"); CCAssert( subview->m_pSuperview == NULL, "child already added. It can't be added again"); if (m_pobBatchView) { m_pobBatchView->appendSubview(subview); if (!m_bReorderChildDirty) { setReorderChildDirtyRecursively(); } } m_bReorderChildDirty = true; m_obSubviews.pushBack(subview); subview->_setZOrder(z); subview->setSuperview(this); subview->setOrderOfArrival(s_globalOrderOfArrival++); if( m_bRunning ) { subview->onEnter(); subview->onEnterTransitionDidFinish(); } }
void Sprite::reorderChild(Node *child, int zOrder) { CCASSERT(child != nullptr, "child must be non null"); CCASSERT(_children.contains(child), "child does not belong to this"); if( _batchNode && ! _reorderChildDirty) { setReorderChildDirtyRecursively(); _batchNode->reorderBatch(true); } Node::reorderChild(child, zOrder); }
void CAView::reorderSubview(CAView *subview, int zOrder) { if (zOrder == subview->getZOrder()) { return; } if( m_pobBatchView && ! m_bReorderChildDirty) { setReorderChildDirtyRecursively(); m_pobBatchView->reorderBatch(true); } CCAssert( subview != NULL, "Subview must be non-nil"); m_bReorderChildDirty = true; subview->setOrderOfArrival(s_globalOrderOfArrival++); subview->_setZOrder(zOrder); this->updateDraw(); }
// Node overrides void Sprite::addChild(Node *child, int zOrder, int tag) { CCASSERT(child != nullptr, "Argument must be non-nullptr"); if (_batchNode) { Sprite* childSprite = dynamic_cast<Sprite*>(child); CCASSERT( childSprite, "CCSprite only supports Sprites as children when using SpriteBatchNode"); CCASSERT(childSprite->getTexture()->getName() == _textureAtlas->getTexture()->getName(), ""); //put it in descendants array of batch node _batchNode->appendChild(childSprite); if (!_reorderChildDirty) { setReorderChildDirtyRecursively(); } } //CCNode already sets isReorderChildDirty_ so this needs to be after batchNode check Node::addChild(child, zOrder, tag); }