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协议的具体代码:

	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时候,才会掉这方法,目前没有具体实现该方法的。
	};

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


PREVIOUS     NEXT