1. 程式人生 > >cocos2dx進階學習之CCNode

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

元件管理,類似userData,但是元件可以增加很多

相關推薦

cocos2dx學習CCNode

繼承關係CCNode  -> CCObjectCCNode在cocos2dx中抽象舞臺物件,需要渲染的物件都是從CCNode派生,包括CCScene,CCLayer,CCSprite等等CCNode提供包容關係管理成員函式virtual bool init();stat

cocos2dx學習CCApplication

繼承關係CCApplication-> CCApplicationProtocol類主要成員變數static CCApplication * sm_pSharedApplication;靜態成員變數,儲存唯一的CCApplication例項的地址。在CCApplicat

cocos2dx學習螢幕適配

背景在學習cocos2dx時,我們在main函式中發現一句程式碼,#include "main.h" #include "AppDelegate.h" #include "CCEGLView.h" USING_NS_CC; int APIENTRY _tWinMain(H

Oracle學習創建數據庫

oracle 用戶 表空間 實例名 寫在前面: Oracle在創建用戶的時候默認使用的表空間為User,我們一般不建議這樣做,因為默認表空間的大小是固定的,如果我們創建的所有用戶都使用默認的表空間會導致表空間空間不足,會導致指向User表空間的所有用戶無法正常使用,聽起來是多麽可怕的一件

學習Oracle增強

一、增刪改資料 1、向emp表中插入一條記錄 ① (方式一:按表預設結構順序)insert into 表名 values ...語法 insert into emp values(1111,'JACK','IT',7788,sysdate,1000,100,40); ② (方式二:按

學習Linux作業系統

一、Linux作業系統概述 1、常見作業系統 ① 服務端作業系統:linux、unix、windows server ② 單機作業系統:windows(dos 、ucdos、win95、win98、win2000、xp、vista、win7、win8)、MAC 、linux(ubun

學習Oracle基礎

一、Oracle概述 1、Oracle資料庫伺服器由二部分組成 ① 例項:理解為物件(看不見的) ② 資料庫:理解為類(看得見的),比如存放在E:\app\Administrator\oradata\orcl\*.DBF 2、Oracle伺服器與orcl資料庫的關係 ① 一個Or

python 學習1

python 安裝 下載Python-3.4.0.tgz,解壓: tar -zxvf  Python-3.4.0.tgz cd  Python-3.4.0 ./configure --prefix=/自己的安裝目錄 python setup.pyinstall --pref

學習JavaScript的BOM程式設計和DOM程式設計

一、BOM(Browser Object Model):瀏覽器物件模型 1、瀏覽器物件模型:把瀏覽器 的各個部分都是用了一個物件進行描述,如果我們要 操作瀏覽器的一些屬性,我就可以通過瀏覽器物件模型的物件進行操作。 2、BOM物件 物件 解釋 w

Java學習集合與泛型(1)

[TOC](目錄) ## 1.集合 #### 1.1.集合是什麼 之前的基礎篇中我們知道了一種資料結構:陣列,可以存放很多資料。但是資料有很大的侷限性: - 支援的資料型別單一 - 宣告時需要指定大小,大小固定,可擴充套件性差 - 連續的儲存單元,對記憶體要求苛刻 那麼是否有其他的資料結構或者資料型

Spring Boot Web 學習 - 單元測試

自動生成 添加 學習 one 類文件 dma AC mock ring 可在類文件中,右鍵->GO TO->Test 自動生成測試文件 1.添加測試註解 簡單方法測試 @RunWith(SpringRunner.class)@SpringBootTes

Android學習筆記15Shader渲染

分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow 也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!        

Tomcat 學習歷程Tomcat架構與核心類分析

前面的http及socket兩部分內容,主要是為了後面看Tomcat原始碼而學習的一些網路基礎。從這章開始,就開始實際深入到Tomcat的‘內在’去看一看。在分析Tomcat的原始碼之前,準備先看一下Tomcat的架構與一些核心類的簡單分析,並簡單介紹一下Tomcat是如何

Tomcat 學習歷程Socket

測試時先啟動服務端,再啟動客戶端,就可以通過客戶端的控制檯向伺服器傳送資料,並接收客戶端的響應資訊。 通過上面的例子,我們可以總結以下幾點: 1)  伺服器先啟動,並等待客戶端的連線請求 2)  客戶端在需要時(可以是任務時候),向服務端發起連線請求 3)  服務端接收到客戶發起的連線請求,接收客戶端傳送過

通過sqli-labs學習sql注入——挑戰less23-28a

這次我又來了,Advanced Injections(進階挑戰),就是一些過濾繞過的東西了,基礎挑戰看這個兩篇 通過sqli-labs學習sql注入——基礎挑戰之less1-10 通過sqli-labs學習sql注入——基礎挑戰之less11-22

ReactNative學習筆記呼叫原生模組(Callback、Promise使用

前言 前文ReactNative學習筆記——呼叫原生模組(Android)簡單說了下ReactNative呼叫Android原生模組的基本用法,下面講解下呼叫原生模組經常會用到的Callback和Promise。 很多時候我們可能不僅僅是呼叫Native的方

Tomcat 學習歷程http協議

Tomcat作為一個Web應用伺服器,最主要的當然就是向客戶(瀏覽器)響應請求的資料,最常用的也就是使用HTTP協議來完成於客戶的互動。所以在進一步學習Tomcat前還是再鞏固一下HTTP協議的知識。 HTTP協議(HyperText Transfer Protocol,超

Python學習筆記——函數語言程式設計返回函式&閉包

1、返回函式 Python中除了返回函式值之外,還可以返回函式,就像前面說的,函式也可以看做一個變數,那麼返回函式的意義在於什麼呢?——延緩函式的呼叫,有什麼應用場景暫且還不知道,後續理解補充。總之,可以想呼叫該返回的函式的時候再呼叫。 用慕課網上廖老師的例子說明一下:

Tomcat 學習歷程Tomcat啟動過程分析

本節通過跟蹤Tomcat的原始碼來分析Tomcat是如何啟動及裝配各個元件的。最好下載Tomcat的原始碼匯入到Eclipse,這樣方便跟蹤。方法可參考: http://www.cnblogs.com/huangfox/archive/2011/10/20/2218970.

Jenkins系列——09配置Linux系統ssh免密碼登陸

dom pub tar finger cnblogs pan 改變 art home ssh認證的完整描述:https://www.ibm.com/developerworks/cn/linux/security/openssh/part1/ 說明:點我去查看 今天我們只說