一、重要概念
導演(ccdirector)
在cocos2d-x引擎中,ccdirector類是整個遊戲的組織和控制核心,遊戲的執行規則,遊戲內的ccscene(場景)、布景(cclayer)、角色(ccsprite)等的運動,均由ccdirector管理。
攝像機(cccamera)遊戲中每個節點都需要攝像機,當節點發生縮放,旋轉和位置變化時,都需要覆蓋攝像機,讓這個節點通過攝像機進行重新渲染。
節點(ccnode)是場景、層、選單、精靈等所有節點的父類,它是乙個抽象類,沒有視覺化表示形式,定義了所有node共有的屬性和方法。
場景(ccscene)
ccscene的4個基本方法:
runwithscene(執行畫面),
replacescene(替換場景 例如從主選單進入遊戲介面),
pushscene(暫停介面),
popscene(從暫停的介面還原到遊戲介面)
層(cclayer)
從概念上說,層就是場景裡的背景。 cclayer同樣是ccnode的子類,通常用addchild方法新增子節點。cclayer物件定義了可描繪的區域,定義了描繪的規則。cclayer可以實現半透明的效果,層的事件相應機制 : 最外層最先接受到事件(螢幕觸碰),最後是底層,如果在某層處理了該事件,則後面的層不會在接受到事件訊號。
角色或者精靈(ccsprite)
sprite物件就是乙個可以移動、選擇、伸縮、動畫的2d圖形,ccsprite物件的子成員中可以包含其它的ccsprite物件。當ccsprite 物件轉換座標系的時候,它所包含的ccsprite物件也會轉換轉換座標系。sprites 是ccnode的子類, 所以他們也可以使用actions來轉換座標。
動作(ccaction)
角色所具有的動作。
以下就是這些概念的關係圖
二、常用的cocos2d-x工具
三、cocos2d-x
記憶體管理
cocos2d-x最初移植自cocos2d的objective c版本。因此,在記憶體管理上,使用了和nsobject類似的引用計數器方法,相關介面放置在ccobject類中。
引用計數器——手動管理記憶體 ccobject的及其子類的物件在建立時,引用計數自動設定為1。之後每次呼叫retain,引用計數+1。每次呼叫release,引用計數-1;若引用計數=0,則直接delete this。 retain是在指標傳遞和賦值時使用的,他的含義是表示擁有。這經常用在指標賦值上。
自動釋放池——自動管理記憶體 對於使用autorelease的物件,不必管它,每幀結束後會自動釋放。 ccnode節點管理 cocos2d-x使用節點組成一棵樹,渲染的時候要遍歷這棵樹。ccnode是所有節點類的父類,他內部使用了乙個ccarray物件管理他的所有子節點,當物件被新增為子節點時,實際上是被新增到ccarray物件中,同時會呼叫這個物件的retain方法。同理,從ccarray中移除時,也會呼叫release方法。
靜態工廠 cocos2d-x中存在大量的靜態工廠方法,這些方法中,全都對this指標呼叫了autorelease函式。 cache機制類
cache內部也使用了ratain和release方法,防止這些資源被釋放掉。 使用這些cache,我們可以儲存預載入的一些資源,在方便的時候呼叫它,去繫結給一些物件。注意,這些cache在場景切換時,不會自動刪除,需要手動呼叫purge***x方法,進行清理。
四、遊戲儲存
ccuserdefault和sqlite
ccuserdefalt存在的的問題
1.沒有記錄和表的概念
你會發現,如果要設定多存檔,必須自己操作,而且**會變得複雜,容易出錯。
對於簡單的遊戲可以使用ccuserdefalt,但是對於複雜遊戲,可以考慮使用sqlite。
2.沒有資料型別安全
比如,如果你錯寫把乙個integer按bool讀取,是沒有錯誤提示的
3.沒有存檔資料完整性的校驗
我們找到之前的存檔記錄,用ccuserdefault::getxmlfilepath()可以獲得存檔位置,開啟它
cocos2d x 原始碼剖析(8)
寫到第7節的時候,突然覺得cocos2d x還沒有我想的那麼大啊,或許在50節以內就要了結了。這節繼續看看ccnode這個節點,主要部分是action。雖然ccnode有不少的action相關的函式,起作用的實際上是actionmanager。這節雖說是從ccnode開始,但是真正的內容在actio...
基2蝶算模組 fft8
滿眼的管腳線看得眼暈,尤其是在測試的時候,才發現測試物件的思考更糾結。對於蝶算模組,其功能是由控制器輸出4個控制計數,butter fly在每乙個時鐘接收一組數。內部設兩級快取交替儲存輸入,同時計算出結果按原址存到ram裡。如下圖所示 對於cmul,每個時鐘接收8個資料,非同步得出結果。基二的蝶型公...
cocos2dx 植物大戰殭屍 21 塔基的更新
在前面的帖子中,塔基生成有兩種方法,一種是通過tmx的tile layer,圖層進行建立,另一種是通過物件層進行建立,需要注意的是,殭屍的findterrainofzombiecollision,是查詢和殭屍碰撞的塔基的,內部實現如下 terrain gamescene findterrainofz...