您的位置:首页 > 其它

用CCRenderTexture和BlendFunc制作游戏教学时使用的黑色覆盖层

2015-04-29 14:15 232 查看
 

  游戏快要完成了,准备做教学。

  我们的教学是在整个界面上盖一层灰色图片,然后把提示点击的按钮部分亮出来,也就是在一块黑色图片上,按需求扣空一小部分。如图,把武器部分扣空,那么在其它地方又会扣空其它部分,而且要可以扣空多个不规则图形。



 

方法:

先计算出要扣空部分的位置和大小,这个很容易,应为它已经在你的界面上了,用->getpositon,->getContentSize,再转换一下世界坐标就可以得到。

然后用混合模式,把灰色图片对应的位置扣空就行了。

 

哎、我比较懒、、、直接贴代码了。。。

CCSprite* createLightMaskSprite(CCSprite* base,vector<CCSprite*> lightNodes)
{
int baseWidth = base->getContentSize().width;
int baseHeight = base->getContentSize().height;

CCRenderTexture* rt = CCRenderTexture::create(baseWidth, baseHeight);//创建纹理渲染范围
ccBlendFunc blendFunc;
blendFunc.src = GL_DST_ALPHA;	//表示使用目标颜色的alpha值来作为因子
blendFunc.dst = GL_ZERO;		//不使用目标颜色

     base->setPosition(ccp(baseWidth/2.0f,baseHeight/2.0f));
rt->begin();
base->visit();	//注意,这里需要先绘制A,遮罩图片
int nodeNum = lightNodes.size();
for (int i=0;i<nodeNum;i++)
{
lightNodes[i]->setBlendFunc(blendFunc);
//注意渲染顺序,先渲染的为的精灵的颜色为目标颜色,后渲染的精灵的颜色为源颜色。
lightNodes[i]->visit();
}
rt->end();

return CCSprite::createWithTexture(rt->getSprite()->getTexture());
}


 

 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐