全部节点都拥有一个摄像机类CCCamera。只有经过摄像机类,节点才会被渲染出来。当节点发生缩放旋转和位置变化的时候,都须要覆盖CCCamera 类,让这个节点经过CCCamera 类从新渲染。函数
注意:CCNode 类里有些方法能够实现缩放、旋转和位置变化,当使用摄像机类实现这些的时候,那些方法就不能同时使用了。使用摄像机类也不能够同时使用世界坐标了。spa
CCCamera 类的继承关系以下:rest
CCCamera -->CCObject-->CCCopying。code
Cocos2D-x 中的CCCamera 类使用OpenGL 的gluLookAt 函数来设置位置。gluLookAt 函数有三组关于坐标的参数,其中“Eye”系列的x、y、z 坐标参数是视角的位置,而“Center”系列的x、y、z 坐标参数是所视目标的坐标位置,“Up”系列的x、y、z 坐标参数是摄像机方向的向量坐标。关于这三个参数,你能够理解为以“Eye”为起点,沿着“Up”方向,朝“Center”看。对象
注意:这里须要说明的是,在三维效果中,使用CCCamera 类是能够的,可是若是你只须要一些二维特效的话,那么更推荐跟随类CCFollow。blog
主要成员函数:继承
init:初始化。get
restore:重置为初始位置。it
locate:使用OpenGL 的gluLookAt 函数来设置。class
setEyeXYZ:设置视角位置坐标。
getEyeXYZ:得到视角位置坐标。
setCenterXYZ:设置目标位置坐标。
getCenterXYZ:得到目标位置坐标。
setUpXYZ:设置摄像机方向坐标。
getUpXYZ:得到摄像机方向坐标。
CCCamera 类能够实现节点对象的缩放旋转:
1 //声明精灵类对象实例
2 CCNode *sprite; 3 //声明摄像机类对象实例
4 CCCamera *cam; 5 //建立精灵类对象
6 sprite = CCSprite::createWithSpriteFrameName("sprite.png"); 7 // 得到摄像机
8 cam = sprite->getCamera(); 9 // 设置z 轴位置
10 cam->setEyeXYZ(0, 0, 100);