首页 > 代码库 > 【cocos2d-x学习笔记】ZOder、tag、场景切换、精灵的各种创建方式、三个特殊层、坐标体系

【cocos2d-x学习笔记】ZOder、tag、场景切换、精灵的各种创建方式、三个特殊层、坐标体系

ZOder:

1、是描述渲染顺序的值,每个CCNode都有ZOder,默认是0。

2、ZOder越大则越后面绘制、如果ZOder值相同,那么看arrival(全局变量每次加一)顺序,先加入的节点先绘制,ZOder只在相同父节点的节点直接进行比较

tag:是一个节点的身份证,方便通过getChildByTag来获取节点对象,它的意义在于减少成员变量

TAG只在相同父节点的节点之间有效

TAG在相同父节点的儿子之间不能相同,相同情况cocos不报错,getChildByTag可能会获取到不是你想要的CCNode

一般用枚举表示TAG以防止重复

TAG有时候用来当ID使用

 

场景切换

CCDirector

runWithScene   运行场景

replaceScene    切换场景 原场景释放

pushScene        切换场景 原场景保留

popScene          与push配合使用 切换

pause               暂停

resume             这个我忘记了

end                  结束

 

精灵创建

1、通过文件直接创建精灵

CCSprite *sprite = CCSprite::create();

2、通过纹理去创建精灵

CCTexture2D *texture = CCTextureCache::sharedTextureCache()->addImage("blocks.png");

CCSprite *sprite = CCSprite::createWithTextrue(texture);

3、通过精灵帧创建精灵

CCSprtieFrame *frame = CCSprtieFrame::createWithTexture(texture, CCRectMake(0, 0, 80, 80));

CCSprite *sprite = CCSprite::createWithSpriteFrame(frame);

4、通过精灵帧缓存创建精灵

CCSpriteFrameCache::sharedSpriteFrameCache()->addSpriteFrame(frame, "MyFrame");

CCSprite *sprite = CCSprite::createWithSpriteFrameName("MyFrame");

 

三个特殊层

  CCLayerColor            可以改变背景,可以设置大小

CCLayerColor *layer = CCLayerColor::create(ccc4(255, 0, 0, 255), winSize.weith/2, winSize.height/2);

 

  CCLayerGradient        有渐变效果的层(颜色、透明度、方向)

CCLayerGradient *layer = CCLayerGradient::create(ccc4(0, 255, 0, 0), ccc4(0, 0, 255, 255));

 

  CCLayerMultiplex       很少用,可以包含好几个层,但是只显示其中一个

CCLayerMultiplex *multi = CCLayerMulitiplex::create(layer1, layer2, NULL);

multi->switchTO(1); // 显示layer2

 

坐标体系

GL坐标体系:左下角为原点

UI最标体系:左上角为原点

 

世界坐标体系:是窗口的坐标体系,它是GL坐标体系,原点在窗口的左下角

节点坐标体系:是Node的坐标体系,它也是GL坐标体系,和世界坐标体系不同的是,它的原点是节点的左下角。

一个节点调用setPosition时,使用的参数是它的父节点(渲染树)的坐标体系。

CCLayer默认大小和窗口一样,所以坐标体系和世界坐标体系重合。

CCScene默认大小和窗口一样,所以坐标体系和世界坐标体系重合。

 

GL坐标和世界坐标之间的转换

CCDirector::sharedDirector()->convertToUI();

CCDirector::sharedDirector()->convertToGL();

世界坐标和节点坐标之间的转换

CCNode::convertoNodeSpace(CCPoint ptInWorld);

CCNode::convertoWorldSpace(CCPoint ptInNode);

按照锚点为原点来进行转换

CCNode::converToNodeSpaceAR(CCPoint ptInWorld);  返回NODE坐标,以锚点为原点

CCNode::converToWorldSpaceAR(CCPoint ptInNode);

用touth作为参数转换

CCNode::convertTouchToNodeSpace 直接将触摸转换成节点坐标系的坐标

 

【cocos2d-x学习笔记】ZOder、tag、场景切换、精灵的各种创建方式、三个特殊层、坐标体系