cocos2dx之渲染樹的繪製

2021-06-21 09:50:30 字數 1053 閱讀 4551

無論如何複雜的遊戲場景也都是精靈通過不同的層次、位置組合構成的,因此只要可以把精靈按照前後層次,在不同的位置繪製出來就完成了遊戲場景的繪製。(這裡僅考慮由精靈構成的簡單遊戲,複雜的遊戲也許會包含其他遊戲元素,但是原理上並不衝突。)在第3章學習遊戲元素時,我們曾接觸過cocos2d-x的渲染樹結構,渲染樹是由各種遊戲元素按照層次關係構成的樹結構,它展示了cocos2d-x遊戲的繪製層次,因此遊戲的渲染順序就是由渲染樹決定的。

回顧cocos2d-x遊戲的層次:導演類ccdirector直接控制渲染樹的根節點--場景(ccscene),場景包含多個層(cclayer),層中包含多個精靈(ccsprite)。實際上,每乙個上述的遊戲元素都在渲染樹中表示為節點(ccnode),遊戲元素的歸屬關係就轉換為了節點間的歸屬關係,進而形成樹結構。

ccnode的visit方法實現了對一棵渲染樹的繪製。為了繪製樹中的乙個節點,就需要繪製自己的子節點,直到沒有子節點可以繪製時再結束這個過程。因此,為了每一幀都繪製一次渲染樹,就需要呼叫渲染樹的根節點。換句話說,當前場景的visit方法在每一幀都會被呼叫一次。這個呼叫是由遊戲主迴圈完成的,cocos2d-x的排程原理,在遊戲的每一幀都會執行一次主迴圈,並在主迴圈中實現對渲染樹的渲染。

void ccdirector::calculatedeltatime(void)

// new delta time. re-fixed issue #1277

if (m_bnextdeltatimezero)

else

#ifdef debug

// if we are debugging our code, prevent big delta time

if(m_fdeltatime > 0.2f)

#endif

*m_plastupdate = now;

}

繪製父節點時會引起子節點的繪製,同時,子節點的繪製方式與父節點的屬性也有關。例如,父節點設定了放大比例,則子節點也會隨之放大;父節點移動一段距離,則子節點會隨之移動並保持相對位置不變。顯而易見,繪製渲染樹是乙個遞迴的過程,可以研究ccnode::vist()

cocos2dx之渲染樹的繪製

無論如何複雜的遊戲場景也都是精靈通過不同的層次 位置組合構成的,因此只要可以把精靈按照前後層次,在不同的位置繪製出來就完成了遊戲場景的繪製。這裡僅考慮由精靈構成的簡單遊戲,複雜的遊戲也許會包含其他遊戲元素,但是原理上並不衝突。在第3章學習遊戲元素時,我們曾接觸過cocos2d x的渲染樹結構,渲染樹...

cocos2dx渲染流程

二 mainloop drawscene當中統計deltatime,再呼叫排程管理器update,opengl clearbuffer,設定渲染檢視矩陣,投影矩陣和紋理,呼叫當前場景visit 遞迴呼叫子節點 呼叫opengl渲染 前後臺緩衝區交換 呼叫統計函式,呼叫自動釋放池的pop。三 ccme...

Cocos2d x 文字渲染

文字渲染 cclabelatlas cclabelbmfont cclabelttf類都是繼承 cclabelprotocol類,即能夠使用系統字,也能夠自己定義渲染字型。cclabelatlas類使用作為文字的一種方式,通過直接定義 cclabelatlas label0 cclabelatlas...