cocos2d-x是由國內一個團隊,將objc語言的cocos2d引擎翻譯到c++語言,以實現了跨平台功能。但是由於c++和objc在一些地方有細微的差別,因此導致了cocos2d-x與cocos2d相比也出現了一些使用上的不同。一下我將列出自己在開發過程中發現的一些不同點:
1. CCMutableDictionary<key, CCObject*>與NSMutableDictionary
CCMutableDictionary是cocos2d-x自己寫的一個類,它模仿了NSMutableDictionary。但是它有一點和NSMutableDictionary是不一樣的。NSMutableDictionary的setObjectForKey方法,如果發現這個key已經存在於字典中的時候,它會自動用新的object覆蓋掉原有的object。而CCMutableDictionary,由於它是使用map實現的字典功能。而在map里面,如果key已存在,是不會用新的object覆蓋掉原有object的。由於這一區別不會導致程序編譯出錯,所以只有在程序運行以后才會發現問題,在使用CCMutableDictionary的時候需要特別注意這一點。
2. CCArray與NSMutableArray
CCArray也是cocos2d-x自己寫的類。它相當於是objc的NSArray。在cocos2d-x中是沒有NSArray的概念的(NSArray和NSMutableArray的唯一區別就是一個不可以改變數組中含有的對象,另一個可以改變)。但是CCArray也有一個小問題。首先,CCArray是不能使用new的方式創建的。其次,使用CCArray::array()創建的數組,即使這個數組已經是當前類的成員變量,也必須要做一次retain,否則的話在創建數組的函數返回的時候,CCArray就會被直接釋放掉了。由於這個問題也無法通過編譯時候暴露出來,而且在objc中創建自動釋放的NSArray類型的成員變量的時候是不需要retain的,所以當我從objc轉為使用cocos2d-x的時候,經常會忘記做retain,多次導致了程序在其他函數中使用該成員變量的時候出現錯誤。
(待續)