3.4.2 颜色布景层类CCLayerColor
颜色布景层类CCLayerColor是CCLayer类的子类,包含CCLayer类的特性,并且有两个拓展功能:可以为布景层增添颜色,以及设置不透明度。
首先看CCLayerColor类的定义初始化,如代码清单3-18所示。这段代码是tests项目下LayerTest.cpp文件中LayerTest1的onEnter函数。
代码清单3-18 CCLayerColor类的定义初始化
void LayerTest1::onEnter() { LayerTest::onEnter(); setTouchEnabled(true); CCSize s=CCDirector::sharedDirector()->getWinSize(); CCLayerColor* layer=CCLayerColor::create(ccc4(0xFF,0x00,0x00,0x80),200,200); layer->ignoreAnchorPointForPosition(false); layer->setPosition(CCPointMake(s.width/2,s.height/2)); addChild(layer,1,kTagLayer); }
create函数的第一个参数是颜色的ARGB值,使用ccc4定义,其中第一个参数是颜色a值,第二个参数是R值,第三个参数是G值,最后一个参数是B值。除此之外,create函数的后两个参数是布景层的宽和高。
另外,使用ignoreAnchorPointForPosition将忽略锚点置为false。由于默认设置是忽略锚点,也就是以左下角为锚点,可以让布景层考虑锚点的影响(关于锚点在之前已经介绍过),这时默认的锚点在中心。运行效果如图3-14所示。
另外,LayerTest.cpp文件中的LayerTest1的updateSize函数中,可以修改颜色布景层的大小,如代码清单3-19所示。
图3-14 定义颜色布景层的显示效果
代码清单3-19 修改颜色布景层的大小
void LayerTest1::updateSize(CCPoint &touchLocation) { CCSize s=CCDirector::sharedDirector()->getWinSize(); CCSize newSize=CCSizeMake(fabs(touchLocation.x - s.width/2)*2,fabs(touchLocation. y - s.height/2)*2); CCLayerColor* l=(CCLayerColor*)getChildByTag(kTagLayer); l->setContentSize(newSize); }
通过setContentSize可以设置颜色布景层的大小。对于CCLayerColor类来说,还有一个比较常用的函数setBlendFunc,可以让布景层的颜色产生渐变效果。比如,需要在整屏添加全屏的一些覆盖效果、全屏变黑或者全屏变暗时,都可以使用这个方法。代码清单3-20所示是tests项目LayerTestBlend类中的newBlend函数,也就是使用setBlendFunc的示例。
代码清单3-20 使用setBlendFunc的示例
void LayerTestBlend::newBlend(float dt) { CCLayerColor *layer=(CCLayerColor*)getChildByTag(kTagLayer); GLenum src; GLenum dst; if(layer->getBlendFunc().dst==GL_ZERO) { src=GL_SRC_ALPHA; dst=GL_ONE_MINUS_SRC_ALPHA; } else { src=GL_ONE_MINUS_DST_COLOR; dst=GL_ZERO; } ccBlendFunc bf={src,dst}; layer->setBlendFunc(bf); }
传入的参数是一个有起始效果和结束效果的参数,运行之后的效果如图3-15和图3-16所示。
图3-15 传入参数GL_SRC_ALPHA的效果
图3-16 传入参数GL_ONE_MINUS_DST_COLOR的效果
CCLayerColor类作为一个带颜色的布景层,在开发中可以给我们做特效带来方便。下一节介绍多层布景层类。