bool CCControlButton::initWithLabelAndBackgroundSprite(CCNode* node, CCScale9Sprite* backgroundSprite) { if (CCControl::init()) { CCAssert(node != NULL, "Label must not be nil."); CCLabelProtocol* label = dynamic_cast<CCLabelProtocol*>(node); CCRGBAProtocol* rgbaLabel = dynamic_cast<CCRGBAProtocol*>(node); CCAssert(backgroundSprite != NULL, "Background sprite must not be nil."); CCAssert(label != NULL || rgbaLabel!=NULL || backgroundSprite != NULL, ""); m_bParentInited = true; // Initialize the button state tables this->setTitleDispatchTable(CCDictionary::create()); this->setTitleColorDispatchTable(CCDictionary::create()); this->setTitleLabelDispatchTable(CCDictionary::create()); this->setBackgroundSpriteDispatchTable(CCDictionary::create()); setTouchEnabled(true); m_isPushed = false; m_zoomOnTouchDown = true; m_currentTitle=NULL; // Adjust the background image by default setAdjustBackgroundImage(true); setPreferredSize(CCSizeZero); // Zooming button by default m_zoomOnTouchDown = true; // Set the default anchor point ignoreAnchorPointForPosition(false); setAnchorPoint(ccp(0.5f, 0.5f)); // Set the nodes setTitleLabel(node); setBackgroundSprite(backgroundSprite); // Set the default color and opacity setColor(ccc3(255.0f, 255.0f, 255.0f)); setOpacity(255.0f); setOpacityModifyRGB(true); // Initialize the dispatch table CCString* tempString = CCString::create(label->getString()); //tempString->autorelease(); setTitleForState(tempString, CCControlStateNormal); setTitleColorForState(rgbaLabel->getColor(), CCControlStateNormal); setTitleLabelForState(node, CCControlStateNormal); setBackgroundSpriteForState(backgroundSprite, CCControlStateNormal); setLabelAnchorPoint(ccp(0.5f, 0.5f)); // Layout update needsLayout(); return true; } //couldn't init the CCControl else { return false; } }