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

一: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;
}

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




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值