关闭

cocos2d-x(4):CCLayer(层) CCLayerColor、CCLayerGradient、CClayerDelegate学习

标签: cocos2d-xCClayerCCLayerColorCClayerGradientCCLayerDelegate
445人阅读 评论(0) 收藏 举报
分类:


CCLayer的继承关系:


由CCLayer的继承关系就可以知道此类可以接受触摸操作,重力加速度计,输入。

CCLayer 类总仅包含CCLayer *CCLayer ::create(void);一个创建层的函数。用法就是创建一个层,添加到渲染树上去。用法之前提到过,再看一遍:

[cpp] view plain copy
  1. CCScene* scene = CCScene::create();  
  2. HelloWorld* layer = HelloWorld::create();  
  3. scene->addChild(layer);  
    此时创建的层是透明的,直接添加到父节点CCScene当中。这里面有一点需要注意,CCLayer默认是忽略锚点的,锚点忽略后其锚点位置位于ccp(0,0)的位置,而CCLayer对象的坐标则默认为ccp(0,0)。

[cpp] view plain copy
  1. #define ccp(__X__,__Y__) cocos2d::CCPointMake((float)(__X__), (float)(__Y__))  
  2. #define CCPointMake(x, y) CCPoint((float)(x), (float)(y))  
由上面两行代码可知ccp()为一个宏,其实际作用是创建一个CCPoint()对象。

之后看一些CCLayer的子类:


在这些子类中,现在只来学习一些CCLayerColor、CCLayerGradient、CCLayerMultiplex。

CCLayerColor:

CCLayerColor类中含有三个创建颜色层的create()函数。

[cpp] view plain copy
  1. CCLayerColor* CCLayerColor::create();  
  2. CCLayerColor * CCLayerColor::create(const ccColor4B& color);  
  3. CCLayerColor * CCLayerColor::create(const ccColor4B& color, GLfloat width, GLfloat height);  
CCLayerColor* CCLayerColor::create():使用此函数,创建一个默认颜色值为ccc4(0,0,0,0),和窗口大小一致的层。

CCLayerColor * CCLayerColor::create(const ccColor4B& color):使用此函数,可以指定一个颜色值,层的大小与窗口一致。

CCLayerColor * CCLayerColor::create(const ccColor4B& color, GLfloat width, GLfloat height):使用此函数,不仅可以给层指定一个颜色,还可以指定层的宽和高。

使用举例:

[cpp] view plain copy
  1. 1、  
  2. CCLayerColor* layerColor1 = CCLayerColor::create();  
  3. addChild(layerColor1);    
  4. 2、  
  5. CCLayerColor* layerColor2 = CCLayerColor::create(ccc4(125,125,125,125));  
  6. addChild(layerColor2);  
  7. 3、  
  8. CCLayerColor* layerColor3 = CCLayerColor::create(ccc4(125, 125, 125, 125),100,100);  
  9. addChild(layerColor3);  

CCLayerGradient:

CCLayerGradient类中含有三个create()函数。

[cpp] view plain copy
  1. CCLayerGradient* CCLayerGradient::create();  
  2. CCLayerGradient* CCLayerGradient::create(const ccColor4B& start, const ccColor4B& end);  
  3. CCLayerGradient* CCLayerGradient::create(const ccColor4B& start, const ccColor4B& end, const CCPoint& v);  
CCLayerGradient* CCLayerGradient::create():使用此函数时候,默认从ccc4(0, 0, 0, 255)变到 ccc4(0, 0, 0, 255),默认从上到下渐变,实际上看不到渐变效果。

CCLayerGradient* CCLayerGradient::create(const ccColor4B& start, const ccColor4B& end):使用此函数可以指定两个渐变颜色,默认从上到下渐变。

CCLayerGradient* CCLayerGradient::create(const ccColor4B& start, const ccColor4B& end, const CCPoint& v):使用此函数可以指定两个渐变颜色,第三个参数是渐变的方向,是一个向量。

其中ccColor4B的与ccc4()具体内容如下:

[cpp] view plain copy
  1. typedef struct _ccColor4B  
  2. {  
  3.     GLubyte r;  
  4.     GLubyte g;  
  5.     GLubyte b;  
  6.     GLubyte a;  
  7. } ccColor4B;  
  8. //! helper macro that creates an ccColor4B type  
  9. static inline ccColor4B  
  10. ccc4(const GLubyte r, const GLubyte g, const GLubyte b, const GLubyte o)  
  11. {  
  12.     ccColor4B c = {r, g, b, o};  
  13.     return c;  
  14. }  
const GLubyte r, const GLubyte g, const GLubyte b, const GLubyte o:前三个为RGB颜色值,最后一个为透明度。

CCLayerMultiplex :

    它可以管理多个层,并实现不同层间的切换,但是同一时间只能有一个层是激活状态,其他都是不可见的。  

实例:

[cpp] view plain copy
  1. CCLayerColor* layerColor = CCLayerColor::create(ccc4(125, 125, 125, 125));  
  2. CCLayerGradient* layerGradient = CCLayerGradient::create(ccc4(0, 0, 0, 255), ccc4(255, 255, 255, 255), ccp(1, 1));  
  3. CCLayerMultiplex* layerMult = CCLayerMultiplex::create(layerColor, layerGradient, NULL);  
  4. addChild(layerMult);  
默认情况下显示第一个层,可以使用layerMult->switchTo(0); 来切换当前显示图层。


在CCLayer、CCLayerColor、CCLayerGradient当中都存在init开头的函数,此函数可以在从CCLayer、CCLayerColor、CCLayerGradient派生子类时,子类init()中初始化父类时直接调用为父类初始化为指定背景颜色等。


转载自:http://blog.csdn.net/const_gong/article/details/46013485


bool T02Layers::init()
{
//	CCLayer::init();
		//红色, 不透明
	CCLayerColor::initWithColor(ccc4(255, 0, 0, 255));
	CCSize winSize = CCDirector::sharedDirector()->getWinSize();
	/*
		CCLayerColor: 可以改变Layer的背景,可以设置大小
		CCLayerGradient: 有渐变效果的层
		CCLayerMultiplex: 很少用,可以包含好几个层,但是只显示其中一个
	*/

	CCLayerColor* layer1 = CCLayerColor::create(ccc4(0, 255, 0, 255), winSize.width/2, winSize.height/2);
	layer1->changeWidthAndHeight(winSize.width, winSize.height);
	//addChild(layer1);

	// 颜色渐变,透明度也可以渐变,渐变的方向  黄色 -  > 蓝色
	CCLayerGradient* layer2 = CCLayerGradient::create(ccc4(255, 255, 0, 255), ccc4(0, 0, 255, 255));
	//layer2->setVector(ccp(0, 1)); // 横坐标不渐变,y坐标从小到大渐变    从底下网上渐变
	//addChild(layer2);
	//layer2->changeWidthAndHeight(winSize.width / 2, winSize.height / 2);
	// 多层
	multi = CCLayerMultiplex::create(layer1, layer2, NULL);
	multi->switchTo(1);  //默认显示第一层,默认为0;  第二层为1 ,以此类推
	addChild(multi);
	// 用鼠标来切换多层
	setTouchEnabled(true);
	setTouchMode(kCCTouchesOneByOne);

	return true;
}

//使用鼠标切换layer
bool T02Layers::ccTouchBegan(CCTouch*, CCEvent*)
{
	static int index = 0;
	multi->switchTo(index = 1 - index);
	return true;
}




1
0
查看评论
发表评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场

六、CCLayer

一个游戏中可以有很多个场景,每个场景里面又可能包含有多个图层,这里的图层一般就是CCLayer对象。CCLayer本身几乎没什么功能,对比CCNode,CCLayer可用于接收触摸和加速计输入。其实,...
  • q199109106q
  • q199109106q
  • 2013-02-22 12:00
  • 7342

从零开始学Cocos2DX 布景层类CCLayer

CCLayer继承自CCNode,并且在此基础上实现触屏事件代理。
  • b275518834
  • b275518834
  • 2014-04-08 13:15
  • 2717

cocos2d-x场景中的层(CCLayer)及其触摸消息响应

cocos2d-x场景中的层(CCLayer)及其触摸消息响应 之前已经建立好了一个场景,在建立场景的时候,已经将一个CCLayer加到场景的子节点上,这个节点将作为这个...
  • zhaohuappc
  • zhaohuappc
  • 2014-03-14 16:33
  • 385

cocos2d-x场景中的层(CCLayer)及其触摸消息响应

之前已经建立好了一个场景,在建立场景的时候,已经将一个CCLayer加到场景的子节点上,这个节点将作为这个场景的父节点,场景中所有的内容都将以它的孩子身份出现。在移动设备上,最常处理的就是触摸消息的响...
  • zhuzhihai1988
  • zhuzhihai1988
  • 2013-06-15 16:56
  • 721

cocos2d-x 菜单选项卡、遮罩层

#include "GameScene.h" GameScene::GameScene(){ } GameScene::~GameScene(){ } bool GameScene::init(){ ...
  • wxc734809128
  • wxc734809128
  • 2014-03-10 17:26
  • 1853

cocos2d-x添加触摸层阻止后端事件

由于cocos2d-x中的优先级小的,先响应触摸事件,这是,我们只需要设置新添加的cclayer层的优先级即可,但由于ccmenu的优先级较高,所以,很有可能透过我们添加的触摸层,响应之前的绑定的bu...
  • somestill
  • somestill
  • 2013-10-15 17:31
  • 15154

cocos2d-x面试题合集

1、Cocos2d-x是怎样实现跨平台?AppDelegate 作为跨平台程序入口,在这之上做了另一层的封装,封装了不同平台的不同实现。比如我们通常认为一个程序是由 main 函数开始运行,那我们就去...
  • mitu405687908
  • mitu405687908
  • 2016-06-17 00:00
  • 1623

从零开始学Cocos2DX 布景层类CCLayer

CCLayer继承自CCNode,并且在此基础上实现触屏事件代理。
  • b275518834
  • b275518834
  • 2014-04-08 13:15
  • 2717

Cocos2d-x 之图层类(CCLayer)

图层对象的三个功能: 1.接受用户操作,比如触屏、重力加速度计的信息。 2.作为游戏内容元素的容器,用于显示游戏画面、承载精灵类、字体文本对象。 3.填充背景游戏背景颜色。 代码示例:...
  • fyn6417
  • fyn6417
  • 2013-10-21 10:16
  • 1247

cocos2d-x 基础概念介绍——导演、场景、层、精灵

在Cocos2d-x-3.x引擎中,采用节点树形结构来管理游戏对象,一个游戏可以划分为不同的场景,一个场景又可以分为不同的层,一个层又可以拥有任意个可见的游戏节点(即对象,游戏中基本上所有的类都派生于...
  • nanshan_hzq
  • nanshan_hzq
  • 2014-10-10 13:53
  • 1157
    个人资料
    • 访问:179264次
    • 积分:3073
    • 等级:
    • 排名:第13148名
    • 原创:134篇
    • 转载:40篇
    • 译文:0篇
    • 评论:30条
    最新评论