1. 程式人生 > >cocos2dx之渲染樹的繪製

cocos2dx之渲染樹的繪製

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

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

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

void CCDirector::calculateDeltaTime(void)
{
    struct cc_timeval now;

    if (CCTime::gettimeofdayCocos2d(&now, NULL) != 0)
    {
        CCLOG("error in gettimeofday");
        m_fDeltaTime = 0;
        return;
    }

    // new delta time. Re-fixed issue #1277
    if (m_bNextDeltaTimeZero)
    {
        m_fDeltaTime = 0;
        m_bNextDeltaTimeZero = false;
    }
    else
    {
        m_fDeltaTime = (now.tv_sec - m_pLastUpdate->tv_sec) + (now.tv_usec - m_pLastUpdate->tv_usec) / 1000000.0f;
        m_fDeltaTime = MAX(0, m_fDeltaTime);
    }

#ifdef DEBUG
    // If we are debugging our code, prevent big delta time
    if(m_fDeltaTime > 0.2f)
    {
        m_fDeltaTime = 1 / 60.0f;
    }
#endif

    *m_pLastUpdate = now;
}

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

相關推薦

cocos2dx渲染繪製

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

渲染構建、佈局及繪製

DOM 樹與 CSSOM 樹融合成渲染樹。 渲染樹只包括渲染頁面需要的節點。 佈局計算每個物件的精確位置及尺寸。 最後一步的繪製,輸入確定的渲染樹,在螢幕上渲染畫素。 構建渲染樹 為了構建渲染樹,瀏覽器大致做了如下: 從 DOM 樹的根節

秀於林風必摧——線段

線段 strong pda -1 自己的 我們 不重復 ebe wid 關於線段樹,其實我一開始也是很懵的,但看久了也就習慣了。   以下是我對線段樹的一點理解,寫得不好,也請各位看官見諒。   搜狗定義:線段樹(Segment Tree)是一種二叉搜索樹,它將一個區間劃分

SparkMLlib分類算法決策學習

2.3 數據預處理 true ray score 嚴重 acc 標準化 lambda SparkMLlib分類算法之決策樹學習 (一) 決策樹的基本概念     決策樹(Decision Tree)是在已知各種情況發生概率的基礎上,通過構成決策樹來求取凈現值的期望值大於等於

SparkMLlib回歸算法決策

ria 之間 feature 輸入 修改 決策樹算法 技術 color 實例 SparkMLlib回歸算法之決策樹 (一),決策樹概念 1,決策樹算法(ID3,C4.5 ,CART)之間的比較:   1,ID3算法在選擇根節點和各內部節點中的分支屬性時,采用信息增益作為評價

數據結構線段

級別 初始 標記 tree clas 表示 概述 左右 傳遞 1、概述 線段樹,也叫區間樹,是一個完全二叉樹,它在各個節點保存一條線段(即“子數組”),因而常用於解決數列維護問題,它基本能保證每個操作的復雜度為O(lgN)。 2、線段樹基本操作 線段樹的基本操作主要包括

cocos2dX 數據存儲

金幣 能夠 cpp 存儲 red 發現 eas hello false 今天我們來看cocos2dX裏面的數據存儲類, CCUserDefault, 如今的遊戲基本都會把用戶信息保存下來, 以便於再次進入遊戲的時候讀取, 為了方便起見,有時我們也能夠用CCUse

DOM節點操作

class類 com size table next nod comment nodevalue sel 節點樹    每個html頁面載入瀏覽器的時候,瀏覽器都會生成一個樹形結構,這個樹形結構由節點組成,我們稱之為節點樹或文檔樹;   每個HTML標簽都是元素節點   每

cocos2dxWebView踩過的坑(android返回鍵處理問題)

lib mar 是否 12px blog tex clas ons 測試的   最近遊戲接入了一個私服平臺,由於沒有sdk,所以支付相關的操作需要在網頁端進行,也就是說點擊充值需要在遊戲內部彈出一個網頁,並定位到平臺充值的地址。查閱相關資料後決定使用cocos2dx自帶的W

機器學習入門決策算法

所有 最大的 id3 次數 要去 決策樹算法 4.5 獲取 ddl 1、什麽是決策樹(Decision Tree) 決策樹是一個類似於流程圖的樹結構,其中每一個樹節點表示一個屬性上的測試,每一個分支代表一個屬性的輸出,每一個樹葉節點代 表一個類或者類的分布

vue 用組件的方式渲染狀數據結構新思路

顯示 com log 不用 代碼 images ges [] 組成 應用場景是這樣的,根據客戶選擇城市(樹狀結構,大概如下所示);展示到頁面,也就是說會與好多層,甚至不確定的情況,一開始選擇的方式逐層判斷,一層層的遍歷,然後後來放棄了,想到了寫菜單組件的時候使用過的組件 -

機器學習決策與隨機森林模型

會有 strong pytho red -s 很多 4.5 是我 機器 歡迎大家前往騰訊雲技術社區,獲取更多騰訊海量技術實踐幹貨哦~ 作者:汪毅雄 導語 本文用容易理解的語言和例子來解釋了決策樹三種常見的算法及其優劣、隨機森林的含義,相信能幫助初學者真正地理解相關知識

二叉查找AVL

結構 ima div info 四種 分享圖片 查找 pos image AVL樹插入數據的四種結構: 第一種: 第二種: 第三種: 第四種: 二叉查找樹之AVL樹

quick-cocos2dx transition.execute()的緩動效果

mod 技術分享 經典 dsm 能夠 經典的 pos shee 區分 註:本文圖片來源(http://hosted.zeh.com.br/tweener/docs/e

Vue源碼翻譯渲染邏輯鏈

sync xtra rec com cto image should import anything   本篇文章主要要記錄說明的是,Vue在Vdom的創建上的相關細節。這也是描繪了Vue在界面的創建上的一個邏輯順序,同時我也非常拜服作者編碼的邏輯性,當然或許這麽龐大復雜的

python GUI編程tkinter示例目錄遍歷工具

容器 string類型 現象 指定 red () 使用 import 信息 摘錄 python核心編程 本節我們將展示一個中級的tkinter應用實例,這個應用是一個目錄樹遍歷工具:它會從當前目錄開始,提供一個文件列表,雙擊列表中任意的其他目錄,就會使得工具切換到新目錄中,

? 一、cocos2dx如何優化內存使用(高級篇)

cell 一個 mpc 情況 sha 優化方案 ali 等等 所有 一、內存優化原則 為了優化應用內存,你應該知道是什麽消耗了你應用的大部分內存,答案就是Texture(紋理)!它幾乎占據了90%的應用內存。那麽我們應該盡力去減小我們應用的紋理內存使用,否則我們的應用

【瀏覽器渲染原理】 渲染和頁面渲染

display 順序 情況下 有一個 所有 覆蓋 isp ID span 來自:https://blog.csdn.net/qq243541844/article/details/51922947 【瀏覽器渲染原理】 渲染樹和頁面渲染 我們主要討論以下列出的幾個問題: 什

rest_framework渲染

res light pytho python ... render urn 作用 將他 渲染器簡介 什麽是渲染器 根據 用戶請求URL 或 用戶可接受的類型,篩選出合適的 渲染組件。 渲染器的作用 序列化、友好的展示數據 渲染器配置 首先要在settins.py

數據結構主席

思想 soft 區間 容易 效果 加減 接受 href bad 這裏先講靜態的主席樹,關於靜態區間第k小。(有興趣的朋友還可以去看看我寫的整體二分,代碼實現略優於主席樹我覺得,當然靜態主席樹是很好寫的) 題目描述: 題目描述 如題,給定N個正整數構成的序列,將對於指定的閉區