cocos2d-x的渲染樹和CCNode類
// Draw the Scene
void CCDirector::drawScene(void)
{
...
//繪製渲染場景
if (m_pRunningScene)
{
m_pRunningScene->visit();
}
...
}
由於cocos2d-x遊戲中的內容都是附加在場景上,所以也就轉換成了整個渲染就是對當前正在執行的場景進行渲染。之前的文章也說過,場景其實本質上就是一個節點(CCNode),只不過它被設定為了根節點,由導演控制,然後不斷的在其上面附加內容,如層、精靈,文字等。
void CCNode::visit() { // quick return if not visible. children won't be drawn. if (!m_bVisible)//如果節點被設定成不可見,則不繪製次節點 { return; } kmGLPushMatrix();//矩陣入棧 if (m_pGrid && m_pGrid->isActive())//是否處理Grid特效 { m_pGrid->beforeDraw(); } //座標轉換(在繪製時,cocos2d-x只把節點繪製在原點,但要正確的繪製在正確的座標,旋轉,縮放等,則要對其進行一系列的轉換計算,而這個方法就是計算這些資料,然後才能把該節點顯示在正確的地方) this->transform(); CCNode* pNode = NULL; unsigned int i = 0; if(m_pChildren && m_pChildren->count() > 0)//遍歷子節點,如果有的話 { sortAllChildren();//按zOrder排序子節點 // draw children zOrder < 0 ccArray *arrayData = m_pChildren->data; //繪製zOrder小於0的子節點 for( ; i < arrayData->num; i++ ) { pNode = (CCNode*) arrayData->arr[i]; if ( pNode && pNode->m_nZOrder < 0 ) { pNode->visit(); } else { break; } } // self draw //繪製自己 this->draw(); //繪製zOrder大於0的子節點 for( ; i < arrayData->num; i++ ) { pNode = (CCNode*) arrayData->arr[i]; if (pNode) { pNode->visit(); } } } else {//沒有子節點,直接繪製自己 this->draw(); } // reset for next frame //重置m_uOrderOfArrival(m_uOrderOfArrival用於節點的對zOrder的排序,當渲染完這一個節點後要把它還原,不然排序有問題) m_uOrderOfArrival = 0; //處理Grid特效 if (m_pGrid && m_pGrid->isActive()) { m_pGrid->afterDraw(this); } //矩陣出棧 kmGLPopMatrix(); }
值得注意的是節點類CCNode的draw是空實現,也就是說如果想要繪製自定義的紋理,則重寫它既可。
void CCNode::draw()
{
//CCAssert(0);
// override me
// Only use- this function to draw your stuff.
// DON'T draw your stuff outside this method
}
由此可見,節點類在cocos2d-x中有著極其重要的作用,它讓整個引擎保持著非常清晰的結構,所以它的功能也是相當的多。
從上圖中可以看見CCNode衍生了很多子類,而其父類又是直接繼承自與CCObject,這樣引擎在管理記憶體便會簡單很多。
CCNode的功能很多,但可以歸納如下:
1)與渲染相關的:縮放,座標位置,旋轉,渲染次序(zOrder),傾斜度,錨點,是否可見,尺寸等。
2)與節點樹相關:增加子節點,刪除節點,獲取子節點,遍歷子節點,子節點數量,設定/獲取父節點等。
3)自定義儲存資料。
4)事件處理。
5)動作管理。
6)定時器處理。
7)座標轉換處理。
8)元件相關。
相關推薦
cocos2d-x的渲染樹和CCNode類
在之前的文章中提到,cocos2d-x的主迴圈會在每幀重新整理頁面,而這個繪製就是以遞迴的方式對這個渲染樹進行渲染。// Draw the Scene void CCDirector::drawScene(void) { ... //繪製渲染場景
cocos2d-x 關於旋轉和移動的一點小技巧
小白 get posit seq sso 解釋 pre create ron 你犯困嗎,恩。給你講個笑話提提神~ 一對情侶去從林遊玩。被食人族捉住。食人族首領心情非常好。說你們假設想活命,就吃掉對方的大便。在他們回來的路上。女人終於忍不住停下。坐到石頭上哭起來。男人
【瀏覽器渲染原理】 渲染樹和頁面渲染
display 順序 情況下 有一個 所有 覆蓋 isp ID span 來自:https://blog.csdn.net/qq243541844/article/details/51922947 【瀏覽器渲染原理】 渲染樹和頁面渲染 我們主要討論以下列出的幾個問題: 什
cocos2d-x getVisibleSize , getVisibleOrigin 和坐標位置
opengl es log DC detail callback reat origin 控件 instance getWinSize : 獲取設備屏幕大小. getVisibleSize:獲得視口(可視區域)的大小,若是DesignResolutionSize跟屏幕尺寸一
Cocos2d-x 渲染器Renderer與6種RenderCommand詳解
Cocos2d-x 渲染器Renderer 宣告:本文使用的是cocos2d-x-3.17的程式碼 在《Cocos場景遍歷與渲染》中已講解了Cocos2d 在渲染時會先遍歷場景,遍歷時會生成渲染命令,渲染器再處理渲染命令繪製出圖形。這篇文章主要是講解渲染器如何處理
cocos2d-x渲染框架
渲染框架 包括 CCDirector CCScene CCLayer CCSprinte 四類 CCDirector 核心類 導演與場景有關的函式 // Scene Management /** Enters the Director's main loop w
Cocos2d-x Sprite 執行 CCFade~ 這類透明度變化動作的一些有關問題
Cocos2d-x Sprite 執行 CCFade~ 這類透明度變化動作的一些問題 在引擎中提供了幾個有關透明度變化的動作:CCFadeIn,CCFadeOut,CCFadeTo CCFadeIn:the opacity from 0 to 255 CCFadeO
Cocos2d-x 專案新建自定義類後編譯錯誤:打不開自定義標頭檔案錯誤解決方案
現在Cocos2dx新建工程需要執行Python指令碼來建立,不再提供Cocos2dx模板。一般我們使用VS2010編譯完Cocos2dx後,可以開始使用Cocos2dx目錄下\tools\project-creator\create_project.py來建立工程。 命
cocos2d-x 3.4 之 三消類遊戲——萬聖大作戰(附加篇)
***************************************轉載請註明出處:http://blog.csdn.net/lttree******************************************** 三消遊戲——萬聖大作戰,應該是
Cocos2d-x 的onEnter() 和 onEnterTransitionDidFinish() 場景延時跳轉
onEnter() 是在進入場景的一瞬間就開始執行了。 onEnterTransitionDidFinish() 是在完全進入場景後開始執行的。 因為在弄場景的延時跳轉,遊戲一開始顯示公司Logo,然後顯示遊戲場景介面。 在第一個場景welcomScene的
cocos2d-x的場景類和生命週期
在上一篇的文章已經通過程式碼分析了場景的跳轉是在主迴圈中setNextScene進行呼叫的,那麼在跳轉時便會開始呼叫生命週期函式。主要由以下四個函式組成 onEnter、onEnterTransitionDidFinish、onExitTransitionDidStart、
Cocos2D-x權威指南: CCNode類方法:
5.1.4 繪圖節點CCNode和圖層CCLayer CCNode中提供的方法,在public塊中的方法主要有以下幾個部分: 1、針對節點顯示的屬性資訊讀寫 2、針對節點變換的屬性資訊讀寫 3、針對子節點的管理相關方法 4、針對節點資料繫結的相關方法 5、針對節點生命週期的
【複習筆記】 cocos2d-x 2.x 渲染特效實現 五 節點樹的模糊效果
到目前為止,我們實現的模糊都是在單張貼圖上的,只是針對當前這一張貼圖對其模糊,因而當圖片中的內容就在圖片邊緣的時候,其模糊在圖片邊緣是被“截斷”的,因此,我們需要一個比原貼圖大,但又包含原本顏色資訊的圖來做模糊。另外,有時候我們需要的模糊並不只是在一張貼圖上,可能當某個單位
Cocos2d-x 影象渲染和動畫——序列幀動畫
建立方法 手動新增序列幀到Animation類 在建立Animation例項時會用到以下幾個介面: addSpriteFrame,新增精靈幀到Animation例項 setDelayUnits,設定每一幀持續時間,以秒為單位 setRestoreOr
Cocos2d-x遊戲開發之lua編輯器 Sublime 搭建,集成cocos2dLuaApi和自有類
系統 下一個 下載 tail mil 命令 term 小寫 一次 版權聲明:本文為博主原創文章。未經博主同意不得轉載。 https://blog.csdn.net/wisdom605768
關於cocos2d-x 和安卓之間的相互調用
using with font android bject deb 交流 sta log 近期在研究cocos2d遊戲移植安卓須要調用非常多方法。所以在研究之中寫下它們之間相互調用 首先,cocos2d調用安卓 在一個.h文件裏加入頭文件 #include &l
寶爺Debug小記——Cocos2d-x(3.13之前的版本)底層BUG導致Spine渲染花屏
lec point ror 排除 再看 加載 莫名奇妙 city .cn 最近在工作中碰到不少棘手的BUG,其中的一個是Spine骨骼的渲染花屏,在戰鬥中派發出大量士兵之後有概率出現花屏閃爍(如下圖所示),這種莫名奇妙且難以重現的BUG最為蛋疼。 前段時間為了提
cocos2d-x CCScrollView和CCTableView的使用
滾動視圖 ddl position 手勢滑動 mar efi rgb process soft 在遊戲和應用中常常要實現左右滑動展示遊戲幫助、以列表顯示內容的UI效果,就像android中的Gallery和ListView。本文通過CCScrollView和CCTab
cocos2d-x-3.3rc2-003 cocos中的引用計數和自己主動釋放池
all post clas popu https -o git 打開鏈接 自己 點擊打開鏈接 cocos2d-x-3.3rc2-003 cocos中的引用計數和自己主動釋放池
【Cocos2d-x】坐標系和圖層
pac 多說 pan art world 地圖 分辨 play instance 在Cocos2D-X中,存在四種坐標系: 1、OpenGL坐標系:該坐標系原點在屏幕左下角。x軸向右,y軸向上。這也就是cocos2dx中用到的坐標系所以沒啥好說的。 2、屏幕坐標系(UI