天天看點

cocos2dx進階學習之CCNode

繼承關系

CCNode  -> CCObject

CCNode在cocos2dx中抽象舞台對象,需要渲染的對象都是從CCNode派生,包括CCScene,CCLayer,CCSprite等等

CCNode提供包容關系管理

成員函數

virtual bool init();

static CCNode * create(void);

建立和初始化接口,create函數會自動調用autorelease

virtual void setZOrder(int zOrder);

virtual void _setZOrder(int z);

virtual int getZOrder();

ZOrder相關設定,ZOrder是指在Z軸方向的順序,訓示對象的覆寫關系,其中_setZOrder隻是改變本對象的成員函數,setZOrder除了改變本對象成員,還會調用父節點相關函數改變該對象在父對象中的位置

virtual void setVertexZ(float vertexZ);

virtual float getVertexZ();

設定OpenGZ的z向量,這個可能會破壞cocos2dx的ZOrder關系

virtual void setScaleX(float fScaleX);

virtual float getScaleX();

virtual void setScaleY(float fScaleY);

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 getPosition(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);

virtual float getSkewX();

virtual void setSkewY(float fSkewY);

virtual float getSkewY();

設定翻轉

virtual void setAnchorPoint(const CCPoint& anchorPoint);

virtual const CCPoint& getAnchorPoint();

設定錨點,錨點是指設定點相對于自己的坐标點,這裡anchorPoint是一個比例值,預設一般(0.5,0.5)

virtual void setContentSize(const CCSize& contentSize);

virtual const CCSize& getContentSize() const;

設定未轉換的節點尺寸,所有的node都有尺寸,Scene和Layer的尺寸與螢幕相同

virtual void setVisible(bool visible);

virtual bool isVisible();

設定是否顯示

virtual void setRotation(float fRotation);

virtual float getRotation();

virtual void setRotationX(float fRotaionX);

virtual float getRotationX();

virtual void setRotationY(float fRotationY);

virtual float getRotationY();

設定旋轉角度

virtual void setOrderOfArrival(unsigned int uOrderOfArrival);

virtual unsigned int getOrderOfArrival();

設定arrival order,當兩個node有相同的zorder時,按照arrival order次序來繪畫

virtual void addChild(CCNode * child);

virtual void addChild(CCNode * child, int zOrder);

virtual void addChild(CCNode* child, int zOrder, int tag);

增加子節點,可以在增加子節點時,設定zOrder和tag

CCNode * getChildByTag(int tag);

virtual CCArray* getChildren();

virtual void setParent(CCNode* parent);

unsigned int getChildrenCount(void) const;

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);

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;

virtual void setTag(int nTag);

設定标簽,每個node可以有一個标簽,用于标示這個節點

virtual void* getUserData();

virtual void setUserData(void *pUserData);

每個node可以設定void*的自定義資料,這個資料可以用來關聯其他系統,比如實體系統對象

virtual CCObject* getUserObject();

virtual void setUserObject(CCObject *pUserObject);

設定關聯的對象,和UserData類似,隻是指針類型不同

virtual CCGLProgram* getShaderProgram();

virtual void setShaderProgram(CCGLProgram *pShaderProgram);

設定着色器

virtual CCCamera* getCamera();

擷取照相機對象

virtual bool isRunning();

是否在運作,運作的意思是節點接受事件回調函數,如OnEnter, OnExit, update等

virtual void registerScriptHandler(int handler);

virtual void unregisterScriptHandler(void);

inline int getScriptHandler() { return m_nScriptHandler; };

注冊lua函數處理OnEnter,OnExit

void scheduleUpdateWithPriorityLua(int nHandler, int priority);

定時回調lua腳本函數

virtual void onEnter();

virtual void onEnterTransitionDidFinish();

virtual void onExit();

virtual void onExitTransitionDidStart();

進入和退出Scene的回調函數,onEnterTransitionDidFinish是在場景切換有動畫時,動畫結束後的回調,onExitTransitionDidStart類似

virtual void cleanup(void);

停止所有的schedule和actions

virtual void draw(void);

繪制node

virtual void visit(void);

繪制所有兒子節點

CCRect boundingBox(void);

擷取節點矩形,該矩形的坐标基于父節點

virtual void setActionManager(CCActionManager* actionManager);

virtual CCActionManager* getActionManager();

設定Action管理器,動畫管理器管理這個node的所有動畫

CCAction* runAction(CCAction* action);

讓node執行動作,這個node也成了action的target,通過action->getTarget可以擷取這個node

注意action并沒有增加node的記憶體計數器

void stopAllActions(void);

void stopAction(CCAction* action);

void stopActionByTag(int tag);

停止action

CCAction* getActionByTag(int tag);

擷取action

unsigned int numberOfRunningActions(void);

傳回正在運作的action個數

virtual void setScheduler(CCScheduler* scheduler);

virtual CCScheduler* getScheduler();

設定排程器

bool isScheduled(SEL_SCHEDULE selector);

檢查函數selector是否被排程

void scheduleUpdate(void);

排程update函數

void scheduleUpdateWithPriority(int priority);

有優先級的排程,priority越小,越先被排程

void unscheduleUpdate(void);

取消排程

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);

定時排程,delay是多少時間後,interval是兩次排程之間間隔多少時間,repeat是重複次數

void resumeSchedulerAndActions(void);

void pauseSchedulerAndActions(void);

排程的暫停和繼續

virtual void update(float delta);

可重載的update函數

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);

void setAdditionalTransform(const CCAffineTransform& additionalTransform);

OpenGL的矩陣坐标轉換

CCPoint convertToNodeSpace(const CCPoint& worldPoint);

CCPoint convertToWorldSpace(const CCPoint& nodePoint);

CCPoint convertToNodeSpaceAR(const CCPoint& worldPoint);

CCPoint convertToWorldSpaceAR(const CCPoint& nodePoint);

坐标轉換,從世界坐标轉到本地坐标(節點坐标),AR結尾序列式轉化時以錨點為原點

CCPoint convertTouchToNodeSpace(CCTouch * touch);

CCPoint convertTouchToNodeSpaceAR(CCTouch * touch);

将CCTouch轉換成節點坐标

CCComponent* getComponent(const char *pName) const;

virtual bool addComponent(CCComponent *pComponent);

virtual bool removeComponent(const char *pName);

virtual void removeAllComponents();