补充:由于版本不能及时更新,还有一处不定需要打,非常抱歉:
1.请各位找到uiwidget.cpp的setEnabled函数实现,替换成
void UIWidget::setEnabled(bool enabled)
{
m_bEnabled = enabled;
GUIRenderer* renderer = DYNAMIC_CAST_CCNODERGBA;
if (renderer)
{
renderer->setEnabled(enabled);
}
else
{
dynamic_cast<RectClippingNode*>(m_pRenderer)->setEnabled(enabled);
}
ccArray* arrayChildren = m_children->data;
int childrenCount = arrayChildren->num;
for (int i = 0; i < childrenCount; i++)
{
UIWidget* child = dynamic_cast<UIWidget*>(arrayChildren->arr*);
child->setEnabled(enabled);
}
}*
2.找到layout类的定义和实现 替换成如下:
Layout.h中
将最底部的RectClippingNode的定义覆盖为
class RectClippingNode : public CCClippingNode{public: virtual ~RectClippingNode(); virtual bool init(); static RectClippingNode* create(); void setClippingSize(const CCSize& size); void setClippingEnabled(bool enabled); virtual void visit(); void setEnabled(bool enabled); bool isEnabled() const;protected: CCDrawNode* m_pInnerStencil; bool m_bEnabled;private: RectClippingNode(); CCPoint rect; CCSize m_clippingSize; bool m_bClippingEnabled;};
再到Layout.cpp中 将 RectClippingNode的实现覆盖为:RectClippingNode::RectClippingNode():m_pInnerStencil(NULL),m_clippingSize(CCSizeMake(50.0f, 50.0f)),m_bClippingEnabled(false),m_bEnabled(true){
}
RectClippingNode::~RectClippingNode(){
}
RectClippingNode* RectClippingNode::create(){ RectClippingNode *pRet = new RectClippingNode(); if (pRet && pRet->init()) { pRet->autorelease(); } else { CC_SAFE_DELETE(pRet); }
return pRet;}
bool RectClippingNode::init(){ m_pInnerStencil = CCDrawNode::create(); rect = ccp(0, 0); rect = ccp(m_clippingSize.width, 0); rect = ccp(m_clippingSize.width, m_clippingSize.height); rect = ccp(0, m_clippingSize.height);
ccColor4F green = {0, 1, 0, 1}; m_pInnerStencil->drawPolygon(rect, 4, green, 0, green); if (CCClippingNode::init(m_pInnerStencil)) { return true; } return false;}
void RectClippingNode::setClippingSize(const cocos2d::CCSize &size){ m_clippingSize = size; rect = ccp(0, 0); rect = ccp(m_clippingSize.width, 0); rect = ccp(m_clippingSize.width, m_clippingSize.height); rect = ccp(0, m_clippingSize.height); ccColor4F green = {0, 1, 0, 1}; m_pInnerStencil->drawPolygon(rect, 4, green, 0, green);}
void RectClippingNode::setClippingEnabled(bool enabled){ m_bClippingEnabled = enabled;}
void RectClippingNode::visit(){ if (!m_bEnabled) { return; } if (m_bClippingEnabled) { CCClippingNode::visit(); } else { CCNode::visit(); }}
void RectClippingNode::setEnabled(bool enabled){ m_bEnabled = enabled;}
bool RectClippingNode::isEnabled() const{ return m_bEnabled;
}