所有節點都擁有一個攝像機類CCCamera。只有通過攝像機類,節點才會被渲染出來。當節點發生縮放旋轉和位置變化的時候,都需要覆蓋CCCamera 類,讓這個節點通過CCCamera 類重新渲染。
注意:CCNode 類里有些方法可以實現縮放、旋轉和位置變化,當使用攝像機類實現這些的時候,那些方法就不能同時使用了。使用攝像機類也不可以同時使用世界坐標了。
CCCamera 類的繼承關系如下:
CCCamera -->CCObject-->CCCopying。
Cocos2D-x 中的CCCamera 類使用OpenGL 的gluLookAt 函數來設置位置。gluLookAt 函數有三組關於坐標的參數,其中“Eye”系列的x、y、z 坐標參數是視角的位置,而“Center”系列的x、y、z 坐標參數是所視目標的坐標位置,“Up”系列的x、y、z 坐標參數是攝像機方向的向量坐標。關於這三個參數,你可以理解為以“Eye”為起點,沿着“Up”方向,朝“Center”看。
注意:這里需要說明的是,在三維效果中,使用CCCamera 類是可以的,但是如果你只需要一些二維特效的話,那么更推薦跟隨類CCFollow。
主要成員函數:
init:初始化。
restore:重置為初始位置。
locate:使用OpenGL 的gluLookAt 函數來設置。
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);