cocos2d-x中最基本的协议

| 分类 cocos2d-x  | 标签 cocos2d-x-2.2.3 
  1. CCRGBAProtocol支持RGBA着色协议,实现此协议的类可以设置ccColor3B类型的颜色和0-255的透明度,下面是实现该类的具体概况:
![image](/assets/classcocos2d_1_1_c_c_r_g_b_a_protocol.png)

下面是关于CCRGBAProtocol协议的具体代码:

  1. class CC_DLL CCRGBAProtocol
  2. {
  3. public:
  4. /**
  5. 设置颜色
  6. */
  7. virtual void setColor(const ccColor3B& color) = 0;
  8. virtual const ccColor3B& getColor(void) = 0;
  9. // 设置透明度
  10. virtual GLubyte getOpacity(void) = 0;
  11. virtual void setOpacity(GLubyte opacity) = 0;
  12. // optional
  13. /**
  14. 设置是否透明度对颜色的影响
  15. returns whether or not the opacity will be applied using glColor(R,G,B,opacity) or glColor(opacity, opacity, opacity, opacity);
  16. */
  17. virtual void setOpacityModifyRGB(bool bValue) = 0;
  18. virtual bool isOpacityModifyRGB(void) = 0;
  19. }; 2. ***CCBlendProtocol***协议,支持混合协议可以让对象指定GL不同的混合函数ccBlendFunc渲染纹理,为glBlendFunc(int sfactor,int dfactor)设置ccBlendFunc值,而ccBlendFunc.src以及ccBlendFunc.dst分别对应于glBlendFunc这个方法的sfactordfactor。下面是实现该类的具体概况:
![image](/assets/classcocos2d_1_1_c_c_blend_protocol.png)

下面是关于CCBlendProtocol协议的具体代码:

  1. class CC_DLL CCBlendProtocol
  2. {
  3. public:
  4. /**
  5. ccBlendFunc示例:
  6. ccBlendFunc kCCBlendFuncDisable = {GL_ONE, GL_ZERO};
  7. {GL_ONE, GL_ONE}, {GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA}
  8. */
  9. virtual void setBlendFunc(ccBlendFunc blendFunc) = 0;//这个函数以一个ccBlendFunc类型的变量为参数。这个ccBlendFunc是个结构体
  10. virtual ccBlendFunc getBlendFunc(void) = 0;
  11. }; 相关示例如下:
  12. ccBlendFunc spriteBlend;
  13. spriteBlend.src = GL_ONE;
  14. spriteBlend.dst = GL_ZERO;
  15. pSprite->setBlendFunc(spriteBlend); 假设精灵pSprite是源颜色.则setBlendFunc的作用就是把精灵pSprite的各个像素的R,G,B,A分量和源颜色因子1.0src = 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)
  1. class CC_DLL CCTextureProtocol : public CCBlendProtocol
  2. {
  3. public:
  4. virtual CCTexture2D* getTexture(void) = 0;//CCTexture2D可以轻松的创建openGL中的纹理图像,文本或原始数据
  5. virtual void setTexture(CCTexture2D *texture) = 0;
  6. }; 4. 下面就讲讲***CCLabelProtocol***协议。所有Label相关对象都实现此协议. 此协议提供一个设置标签文本的接口。
![image](/assets/classcocos2d_1_1_c_c_label_protocol.png)

具体相关代码如下:

  1. class CC_DLL CCLabelProtocol
  2. {
  3. public:
  4. virtual void setString(const char *label) = 0;//当setString后,label会将该string通过CCTexture2D纹理类将string转换成CCImage,再通过CCImage转成unsigned char*,再把这转到openg es的纹理上
  5. virtual const char* getString(void) = 0;
  6. }; 5. ***CCDirectorDelegate***实现CCDirector代理协议的类,可以响应CCDirector的设备旋转以及更新投影的消息。目前没有相关实现类,具体相关代码:
  7. class CC_DLL CCDirectorDelegate
  8. {
  9. public:
  10. virtual void updateProjection(void) = 0;//当ccDirectorProjection的值为kCCDirectorProjectionCustom时候,才会掉这方法,目前没有具体实现该方法的。
  11. };

青春是一场大雨,即使感冒了,还盼回头再淋一次...image...微笑永远是一个人身上最好看的东西...


PREVIOUS     NEXT