5.1.4 繪圖節點CCNode和圖層CCLayer
CCNode中提供的方法,在public塊中的方法主要有以下幾個部分:
1、針對節點顯示的屬性信息讀寫
2、針對節點變換的屬性信息讀寫
3、針對子節點的管理相關方法
4、針對節點數據綁定的相關方法
5、針對節點生命週期的相關方法
6、針對節點處理動作CCAction的相關方法
7、針對節點定時任務的相關方法
8、針對節點座標變換的相關方法在CCNode中的節點都有自己的座標系,稱爲節點座標系,當節點座標系變換後該節點的所有子節點都會隨之變換。
節點在添加到場景時會參考節點的錨點,錨點缺省定義爲該節點的中心,在貼圖時候會以錨點爲中心,改變錨點並沒有改變節點的位置,只是改變了貼圖的位置。
Cocos2d-x中的世界座標系和openGL座標系一致,左下角爲0,0點,x軸向右,y軸向上。
CCScene類是CCNode類的子類。和CCNode相比,它只是多了自己的錨點,在屏幕的中間位置。
CCLayer也是CCNode的子類,相比CCNode增加了用戶的交互功能。
class CC_DLL CCNode : public CCObject
{
public:
CCNode(void);
virtual ~CCNode(void);
virtual bool init(); //初始化節點
static CCNode * create(void); //創建節點對象
const char* description(void);
virtual void setZOrder(int zOrder); //設定節點Z軸排序
virtual void _setZOrder(int z);
virtual int getZOrder();
virtual void setVertexZ(float vertexZ);//設置Z座標
virtual float getVertexZ();
virtual void setScaleX(float fScaleX); //設定X軸縮放係數(0-1)
virtual float getScaleX();
virtual void setScaleY(float fScaleY); //設定Y軸縮放係數
virtual float getScaleY();
virtual void setScale(float scale); //設定縮放係數
virtual float getScale();
virtual void setScale(float fScaleX,float fScaleY);
virtual void setPosition(const CCPoint &position); //設定座標
virtual const CCPoint& getPosition(); //獲取座標
virtual void setPosition(float x, float y);
virtual void setPositionX(float x);
virtual float getPositionX(void);
virtual void setPositionY(float y);
virtual float getPositionY(void);
virtual void setSkewX(float fSkewX); //設定x軸扭曲係數
virtual float getSkewX();
virtual void setSkewY(float fSkewY); //設定y軸扭曲係數
virtual float getSkewY();
virtual void setAnchorPoint(const CCPoint& anchorPoint); //設定錨點
virtual const CCPoint& getAnchorPoint(); //獲取錨點
virtual const CCPoint& getAnchorPointInPoints();//獲取錨點絕對座標
virtual void setContentSize(const CCSize& contentSize); //設定節點尺寸
virtual const CCSize& getContentSize() const; //獲取節點尺寸
virtual void setVisible(bool visible); //設置節點是否可見
virtual bool isVisible(); //返回節點是否可見
virtual void setRotation(float fRotation);//設置旋轉角度
virtual float getRotation(); //獲取旋轉角度
virtual void setRotationX(float fRotaionX);//設置X軸旋轉角度
virtual float getRotationX();
virtual void setRotationY(float fRotationY);//設置Y軸旋轉角度
virtual float getRotationY();
//當節點的ZOrder相同時,使用該值做以區分
virtual void setOrderOfArrival(unsigned int uOrderOfArrival);
virtual unsigned int getOrderOfArrival();
//設置GLServer狀態
virtual void setGLServerState(ccGLServerState glServerState);
//獲取GLServer狀態
virtual ccGLServerState getGLServerState();
//設置是否忽略錨點位置
virtual void ignoreAnchorPointForPosition(bool ignore);
//獲取是否忽略錨點位置
virtual bool isIgnoreAnchorPointForPosition();
virtual void addChild(CCNode * child); //添加子節點
virtual void addChild(CCNode * child, int zOrder);
virtual void addChild(CCNode* child, int zOrder, int tag);
virtual CCArray* getChildren(); //獲取所有子節點
virtual void setParent(CCNode* parent); //設置父節點
virtual CCNode* getParent(); //獲取父節點
virtual void removeFromParent(); //從父節點中移除
//從父節點移除、參數決定是否清楚本節點
virtual void removeFromParentAndCleanup(bool cleanup);
virtual void removeChild(CCNode* child); //移除某個子節點
virtual void removeChild(CCNode* child, bool cleanup);
virtual void removeChildByTag(int tag); //移除某個tag對應的子節點
virtual void removeChildByTag(int tag, bool cleanup);
virtual void removeAllChildren(); //移除所有子節點
virtual void removeAllChildrenWithCleanup(bool cleanup);
virtual void reorderChild(CCNode * child, int zOrder);//重排某個子節點
virtual void sortAllChildren(); //對所有子節點重拍
virtual CCGridBase* getGrid(); //獲取網格對象
virtual void setGrid(CCGridBase *pGrid); //設置網格對象
virtual int getTag() const; //獲取當前節點的Tag
virtual void setTag(int nTag); //設置當前節點的Tag
virtual void* getUserData(); //獲取用戶數據
virtual void setUserData(void *pUserData); //設置用戶數據
virtual CCObject* getUserObject(); //獲取用戶數據對象
virtual void setUserObject(CCObject *pUserObject); //設置用戶數據對象
virtual CCGLProgram* getShaderProgram(); //獲取Shader程序
virtual void setShaderProgram(CCGLProgram *pShaderProgram);
virtual CCCamera* getCamera(); //獲取攝像機對象
virtual bool isRunning(); //獲取當前Node是否在運行
virtual void registerScriptHandler(int handler); //註冊腳本Handler
virtual void unregisterScriptHandler(void);
inline int getScriptHandler() { return m_nScriptHandler; };
//執行Lua腳本計劃任務
void scheduleUpdateWithPriorityLua(int nHandler, int priority);
virtual void onEnter() ; //進入節點對象
virtual void onEnterTransitionDidFinish(); //進入節點動畫完成
virtual void onExit(); //離開節點對象
virtual void onExitTransitionDidStart(); //離開節點動畫完成
virtual void cleanup(void); //停止所有動畫和調度
virtual void draw(void); //繪圖,渲染當前節點函數
virtual void visit(void); //遞歸遍歷當前節點樹
CCRect boundingBox(void); //返回節點區域
//設置當前節點的ActionManager
virtual void setActionManager(CCActionManager* actionManager);
virtual CCActionManager* getActionManager();
CCAction* runAction(CCAction* action); //讓當前節點執行動作
void stopAllActions(void); //停止所有動作
void stopAction(CCAction* action); //停止某一個動作
void stopActionByTag(int tag); //停止標記爲tag的動作
CCAction* getActionByTag(int tag); //獲取標記爲tag的動作
unsigned int numberOfRunningActions(void); //返回綁定該節點的動作數
virtual void setScheduler(CCScheduler* scheduler); //設置任務管理器
virtual CCScheduler* getScheduler(); //獲取任務管理器
bool isScheduled(SEL_SCHEDULE selector); //是否執行了某個任務
void scheduleUpdate(void); //執行定時調用任務update
//按照指定優先級運行update任務
void scheduleUpdateWithPriority(int priority);
void unscheduleUpdate(void); //停止update任務
//指定按照的時間間隔和等待時間,指定次數執行某個任務
void schedule(SEL_SCHEDULE selector, float interval,
unsigned int repeat, float delay);
//指定按照的時間間隔執行某個任務
void schedule(SEL_SCHEDULE selector, float interval);
//等待一定時間以後執行某個任務
void scheduleOnce(SEL_SCHEDULE selector, float delay);
void schedule(SEL_SCHEDULE selector); //執行任務
void unschedule(SEL_SCHEDULE selector); //取消執行某個任務
void unscheduleAllSelectors(void); //取消執行所有任務
void resumeSchedulerAndActions(void); //恢復節點任務和動作
void pauseSchedulerAndActions(void); //暫停節點任務和動作
virtual void update(float delta); //定時任務回調方法
void transform(void); //矩陣座標變換
void transformAncestors(void); //預設變換矩陣
virtual void updateTransform(void); //變換方法
//仿射變換從當前節點到父節點
virtual CCAffineTransform nodeToParentTransform(void);
//仿射變換從父節點到當前節點
virtual CCAffineTransform parentToNodeTransform(void);
//仿射變換當前節點到世界節點
virtual CCAffineTransform nodeToWorldTransform(void);
//仿射變換世界節點到當前節點
virtual CCAffineTransform worldToNodeTransform(void);
//轉化爲節點空間座標,相對於節點左下角,與錨點無關
CCPoint convertToNodeSpace(const CCPoint& worldPoint);
//轉化爲世界空間座標,相對於節點左下角,與錨點無關
CCPoint convertToWorldSpace(const CCPoint& nodePoint);
//轉化爲節點空間座標,相對於節點左下角,相對於錨點
CCPoint convertToNodeSpaceAR(const CCPoint& worldPoint);
//轉化爲世界空間座標,相對於節點左下角,相對於錨點
CCPoint convertToWorldSpaceAR(const CCPoint& nodePoint);
//從觸屏對象轉化爲節點空間座標
CCPoint convertTouchToNodeSpace(CCTouch * touch);
//從觸屏對象轉化爲節點空間座標,輸入輸出都相對於錨點
CCPoint convertTouchToNodeSpaceAR(CCTouch * touch);
//設置變換
void setAdditionalTransform(const CCAffineTransform&
additionalTransform);
//獲取組件
CCComponent* getComponent(const char *pName) const;
//添加組件
virtual bool addComponent(CCComponent *pComponent);
//移除組件
virtual bool removeComponent(const char *pName);
//移除所有組件
virtual void removeAllComponents();
private:
void childrenAlloc(void);
void insertChild(CCNode* child, int z);
void detachChild(CCNode *child, bool doCleanup);
CCPoint convertToWindowSpace(const CCPoint& nodePoint);
......
}