一:CCNode
CCNode节点内是coco2d-x中主要的类,继承之CCObject,如图
任何要画在屏幕上的对象都是CCNode,如场景(CCScene),布局(CCLayer),菜单(CCMenu),精灵(CCSprite)
主要特征:
1.有周期回调函数(Schedule,UnScheduled......)
2.每个节点都可以包含子节点(父节点的设置可以传递代子节点)
3.可以有动作(CCAction)
4.CCNode不自带贴图。
5.CCNode 类不含有贴图,它可以进行位置的平移、大小的伸缩变化、旋转变化
使用场合:
1.需要一个父节点要管理一批子节点
2.需要自定一个画在屏幕上的对象,这时可以让该跪下继承CCNode
二:coco2d-x的坐标系
Cocos2D-x 以OpenGL 和OpenGL ES 为基础,该坐标系原点在屏幕左下角,x 轴向右,y 轴向上
世界坐标系:世界坐标系也叫作绝对坐标系,是游戏开发中建立的概念,因此,“世界”即是游戏世界。它建立了描述其他坐标系所需要的参考标准。我们能够用世界坐标系来描述其他坐标系的位置
Cocos2D-x 中的元素是有父子关系的层级结构。通过CCNode 设置位置使用的是相对其父节点的本地坐标系,而非世界坐标系。最后在绘制屏幕的时候,Cocos2D-x会把这些元素的本地节点坐标映射成世界坐标系坐标。世界坐标系和OpenGL 坐标系方向一致,原点在屏幕左下角,x 轴向右,y 轴向上。
锚点:锚点指定了贴图上和所在节点原点(也就是设置位置的点)重合的点的位置,因此只有在CCNode 类节点使用贴图的情况下,锚点才有意义
节点坐标系:和特定节点相关联的坐标系,当节点移动或改变方向时,和该节点关联的坐标系(它的子节点)将随之移动或改变方向.CNode 类的设置位置使用的就是父节点 的节点坐标系
在CCNode类中有:
convertToWorldSpace:把基于当前节点❑ 的本地坐标系下的坐标转换到世界坐标系中。
convertToNodeSpace:把世界坐标转换到当前节点的本地坐标系中
三:实例
新建一个coco2d-x项目,打开HelloWorldScene.cpp,在将bool HelloWorld::init()中的代码替换如下代码
bool HelloWorld::init()
{
bool bRet = false;
do
{
//
// super init first
//
//创建一个CCNode
CC_BREAK_IF(! CCLayer::init());
CCNode *anode=CCNode::create();
this->addChild(anode,0);
//添加退出菜单
CCMenuItemImage *pCloseItem=CCMenuItemImage::create("CloseNormal.png","CloseSelected.png",this,
menu_selector(HelloWorld::menuCloseCallback));
pCloseItem->setPosition(ccp(CCDirector::sharedDirector()->getWinSize().width - 20,20) );
CCMenu *pMenu=CCMenu::create(pCloseItem,NULL);
pMenu->setPosition(CCPointZero);
anode->addChild(pMenu,1);
//添加一个文字标签
CCSize size=CCDirector::sharedDirector()->getWinSize();
CCLabelTTF* pLable=CCLabelTTF::create("Hello COCO","Thonburi",34);
pLable->setPosition(ccp(size.width/2,size.height-20));
anode->addChild(pLable,1);
//添加helloWorld精灵图片
CCSprite *pSprint=CCSprite::create("HelloWorld.png");
pSprint->setPosition(ccp(size.width/2,size.height/2));
anode->addChild(pSprint,0);
anode->setPosition(200,200);
//设置缩放
anode->setScale(0.5);
//旋转
anode->setRotation(90.0);
bRet = true;
} while (0);
return bRet;
}
然后编译运行,结构如图所示