cocos2d-x 2.0 小心CCNode::setVisible,一不小心就看不见了

先创建,隐藏在后台,需要时再显示,这个流程小心节点看不见

class CTestLayer
{
CCSprite * m_pTestSprite;
void onEnter()
{
m_pTestSprite = CCSprite::create("XXX");
m_pTestSprite->setVisible(false);  //此时我不想显示
this->addChild(m_pTestSprite);
}


bool ccTouchBegan(cocos2d::CCTouch* touch, cocos2d::CCEvent* event)
{
//理论上,调用这个,精灵就能显示,实际上还是看不见
//因为没弄脏不重绘

m_pTestSprite->setVisible(true);
//所以最简单弄脏的方法,就是重置一下坐标点
m_pTestSprite->setPosition(m_pTestSprite->getPosition());    //m_bIsTransformDirty = m_bIsInverseDirty = true;
return false;
}

}


其实我想的做法,应该是CCNode::setVisible(TRUE)时,应该设置m_bIsTransformDirty = m_bIsInverseDirty = true

同时,把所有子节点的m_bIsTransformDirty = m_bIsInverseDirty = true;


        CCNode::setVisible(bool bVisible)
{
bool bChange = m_bIsVisible == bVisible);
m_bIsVisible = bVisible;
if(bChange && bVisible)
{

                        //弄脏自身

                        this->setPosition(this->getPosition());     

                       //弄脏所有子节点
CCArray * pChildArr = CCNode::getChildren();
for(int i = 0; i < pChildArr->count(); ++i)
{
CCNode * thisChild = (CCNode *)pChildArr->objectAtIndex(i);
thisChild->setPosition(thisChild->getPosition());
}
}
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值