- CCRGBAProtocol支持RGBA着色协议,实现此协议的类可以设置ccColor3B类型的颜色和0-255的透明度,下面是实现该类的具体概况:
![image](/assets/classcocos2d_1_1_c_c_r_g_b_a_protocol.png)
下面是关于CCRGBAProtocol协议的具体代码:
class CC_DLL CCRGBAProtocol
{
public:
/**
设置颜色
*/
virtual void setColor(const ccColor3B& color) = 0;
virtual const ccColor3B& getColor(void) = 0;
// 设置透明度
virtual GLubyte getOpacity(void) = 0;
virtual void setOpacity(GLubyte opacity) = 0;
// optional
/**
设置是否透明度对颜色的影响
returns whether or not the opacity will be applied using glColor(R,G,B,opacity) or glColor(opacity, opacity, opacity, opacity);
*/
virtual void setOpacityModifyRGB(bool bValue) = 0;
virtual bool isOpacityModifyRGB(void) = 0;
}; 2. ***CCBlendProtocol***协议,支持混合协议可以让对象指定GL不同的混合函数ccBlendFunc渲染纹理,为glBlendFunc(int sfactor,int dfactor)设置ccBlendFunc值,而ccBlendFunc.src以及ccBlendFunc.dst分别对应于glBlendFunc这个方法的sfactor和dfactor。下面是实现该类的具体概况:
![image](/assets/classcocos2d_1_1_c_c_blend_protocol.png)
下面是关于CCBlendProtocol协议的具体代码:
class CC_DLL CCBlendProtocol
{
public:
/**
ccBlendFunc示例:
ccBlendFunc kCCBlendFuncDisable = {GL_ONE, GL_ZERO};
{GL_ONE, GL_ONE}, {GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA}
*/
virtual void setBlendFunc(ccBlendFunc blendFunc) = 0;//这个函数以一个ccBlendFunc类型的变量为参数。这个ccBlendFunc是个结构体
virtual ccBlendFunc getBlendFunc(void) = 0;
}; 相关示例如下:
ccBlendFunc spriteBlend;
spriteBlend.src = GL_ONE;
spriteBlend.dst = GL_ZERO;
pSprite->setBlendFunc(spriteBlend); 假设精灵pSprite是源颜色.则setBlendFunc的作用就是把精灵pSprite的各个像素的R,G,B,A分量和源颜色因子1.0(src = GL_ONE)相乘. 如果精灵pSprite是目标颜色,则setBlendFunc的作用就是把精灵pSprite的各个像素的R,G,B,A分量和目标颜色因子(dst = GL_ZERO)相乘. `如何界定pSprite是源颜色还是目标颜色呢?` 如果这个时候还存在一个精灵`pSpriteOther`.如果`pSprite`先调用visit(), 然后`pSpriteOther`后调用visit()(visit()的作用是递归的渲染精灵和他的孩子节点)。。。则先调用visit()的为目标颜色,后调用visit的为源颜色。即:`pSprite是目标颜色 ,pSpriteOther为源颜色`。 3. ***CCTextureProtocol***支持纹理协议可以使得CCNode对象使用纹理来渲染自己,CCNode对象使用cctexture2d渲染图像。纹理可以包含一个混合函数,此函数可以在任意时间被更改,`CCTextureProtocol`继承自`CCBlendProtocol`,下面是具体的CCTextureProtocol代码概况:
![image](/assets/classcocos2d_1_1_c_c_texture_protocol.png)
class CC_DLL CCTextureProtocol : public CCBlendProtocol
{
public:
virtual CCTexture2D* getTexture(void) = 0;//CCTexture2D可以轻松的创建openGL中的纹理图像,文本或原始数据
virtual void setTexture(CCTexture2D *texture) = 0;
}; 4. 下面就讲讲***CCLabelProtocol***协议。所有Label相关对象都实现此协议. 此协议提供一个设置标签文本的接口。
![image](/assets/classcocos2d_1_1_c_c_label_protocol.png)
具体相关代码如下:
class CC_DLL CCLabelProtocol
{
public:
virtual void setString(const char *label) = 0;//当setString后,label会将该string通过CCTexture2D纹理类将string转换成CCImage,再通过CCImage转成unsigned char*,再把这转到openg es的纹理上
virtual const char* getString(void) = 0;
}; 5. ***CCDirectorDelegate***实现CCDirector代理协议的类,可以响应CCDirector的设备旋转以及更新投影的消息。目前没有相关实现类,具体相关代码:
class CC_DLL CCDirectorDelegate
{
public:
virtual void updateProjection(void) = 0;//当ccDirectorProjection的值为kCCDirectorProjectionCustom时候,才会掉这方法,目前没有具体实现该方法的。
};
青春是一场大雨,即使感冒了,还盼回头再淋一次......微笑永远是一个人身上最好看的东西...