您的位置:首页 > Web前端 > Node.js

【3】coco2d-x 核心类之CCNode以及coco2d-x的坐标系

2013-12-21 15:46 369 查看
一: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;

}

然后编译运行,结构如图所示

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: