【玩转cocos2d-x之二十九】利用CCClipingNode做游戏遮罩
新手引导是游戏中必备的(除了奇葩的MT用一段动画开始),也是玩家对游戏的第一印象,重要性不言而喻。一般采用的遮罩的形式来突出引导重点,同时屏蔽其他功能。这里简单的介绍一下游戏遮罩的实现,并给出一个示例。
CCClipingNode
CCClipingNode是一个可裁剪节点,简单理解:
(1)首先它是一个节点,继承于CCNode,所以它可以像普通节点一样放入CCLayer,CCScene,CCNode中。
(2)作为节点,它就可以用作容器,承载其他节点和精灵。我把它叫底板。
(3)如果想要对一个节点进行裁剪,那需要给出裁剪的部分,这个裁剪区域,我把它叫模版。
所以CCClipingNode裁剪节点在组成上=底板+模版,而在显示上=底板-模版。不知道这样解释会不会好理解一点。
API
CCClipingNode的使用还是比较简单的,至于显示底板还是模版,alpha值的设定,这些也不好说清楚,自己多试几次就知道是什么意思该怎么用了。
CCClipingNode API1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
| static CCClippingNode* create();
static CCClippingNode* create(CCNode *pStencil);
virtual bool init();
virtual bool init(CCNode *pStencil);
CCNode* getStencil() const; void setStencil(CCNode *pStencil);
GLfloat getAlphaThreshold() const; void setAlphaThreshold(GLfloat fAlphaThreshold);
bool isInverted() const; void setInverted(bool bInverted);
|
示例
在init中实现:
CCClipingNode的使用1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40
| CCSize visibleSize=CCDirector::sharedDirector()->getVisibleSize(); CCSprite* background = CCSprite::create("HelloWorld.png"); background->setPosition(ccp(visibleSize.width/2,visibleSize.height/2)); this->addChild(background,kTagBackground); clip=CCClippingNode::create(); clip->setInverted(true); clip->setAlphaThreshold(0.0f); this->addChild(clip,kTagClipNode); CCLayerColor* back=CCLayerColor::create(ccc4(0,0,0,200)); clip->addChild(back);
CCNode* nodef=CCNode::create(); CCSprite* close=CCSprite::create("CloseSelected.png"); nodef->addChild(close); nodef->setPosition(ccp(visibleSize.width/2,visibleSize.height/2)); clip->setStencil(nodef); tip = CCSprite::create("tip.png"); tip->setScale(0.5f); tip->setRotation(60); tip->setPosition(ccp(visibleSize.width/2-70,visibleSize.height/2+50)); this->addChild(tip,kTagTip); tip->runAction(CCRepeatForever::create(CCSequence::create(CCScaleBy::create(0.25f,0.95f),CCScaleTo::create(0.25f,0.5),NULL))); this->setTouchEnabled(true);
|
效果
两种效果:
源码
下载地址