(原創做品,歡迎轉載,註明出處,謝謝:http://www.cnblogs.com/binxindoudou/admin/EditPosts.aspx?postid=3179335)node
1.單例模式中,靜態指針的釋放過程(垃圾工人)c++
2.反射機制的使用(oc中的語言特性,c++沒有)編程
3.觸摸事件的setHandlePriority()的bug數組
4.CCDictionary只有讀取plist沒有寫入plist,因此對於遊戲中的動態數據就只能使用CCUserDefault::sharedUserDefault()的方式進行保存和修改xcode
5.animation = CCAnimation::createWithSpriteFrames(frameArray,frameRate);iphone
CCAnimation::create()默認使用的CCAnimationFrame的數組,以前一直使用CCSpriteFrame,中間有個類型檢查,通不過。函數
因此只好使用createWithSpriteFrames了。post
6.c++中的經過類對象獲取類名,typeid().name()獲取到的類名有多餘的信息,須要字符串處理才能繼續使用。動畫
比較容易使用的方法:dynamic_cast();這個dynamic_cast()進行強轉的策略是,子類對象能夠強轉成父類指針,而父類對象或者其餘對象轉成子類指針時會爲空this
7.在cocos2d-x中,精靈的默認錨點爲ccp(0,0);
8.cocos2d-x在xcode中編輯編譯與調試體驗不如cocos2d-iphone,例如調試時候po,oc中支持description,而c++沒有;再如CCArray和CCDictionary,po也打印不出內容
9.觸摸事件的認識,就component類來講,繼承自sprite,在onEnter和onExit函數中,進行觸摸代理的添加和移除,事實上只有繼承自CCLayer纔可這麼幹,不然的話應該添加註冊函數。
10.使用單例類來保存CCArray或者CCDictionary的時候,千萬要注意,這些東西會被autorelease掉。到底是何時釋放的,我不清楚,老是cocos2d-iphone是沒有問題的(它多是最後釋放),可是-x就不必定了,因此須要手工控制引用計數,給保存資源的變量或者指針—>retain()便可解決。還有就是,在shareInstance靜態方法中,千萬不要使用cocos2d-x默認的CREATE_FUN宏函數,由於這裏面也有autorelease,沒有試過會不會出問題,可是看例子都是直接Class* instance = new Class();instance->init();。糾結了很久,終於明白,灰常高興,程序猿的快樂就是這麼簡單!
10.獲取類型的時候,不存在NSStringFromClass,因此就在每一個須要獲取類信息的類裏添加上獲取信息的方法,以便獲取信息。c++中的typeid(Class).name(),會根據編譯器的不一樣來產生不一樣的字符串,難以加以解析。
11.對於自定義按鈕的點擊監聽事件,能夠有兩種,所在層上監聽,事件分發處理,挨個找;在自定義控件範圍上處理,在範圍內能夠,不在範圍內不響應。要注意座標系的中點的變換。重點在以下兩個函數:
bool CCMySprite::ccTouchBegan(CCTouch* pTouch, CCEvent* pEvent)
{
CCPoint touchLocation = pTouch->getLocation(); // 返回GL座標
CCPoint localPos = this->convertToNodeSpace(touchLocation);//切記這裏是轉成相對與本身的座標
CCRect rc = rect();
rc.origin = CCPointZero;
bool isTouched = rc.containsPoint(localPos);
if(isTouched)
{
printf("nihao");
return true;
}
printf("wohao");
returnfalse;
}
CCRectCCMySprite::rect()
{
returnCCRectMake(getPositionX() - getContentSize().width * getAnchorPoint().x,
getPositionY() - getContentSize().height * getAnchorPoint().y,
getContentSize().width, getContentSize().height);
}
12.小差別:對於數組來講,-phone上的非空能夠移除走,而-x不能夠,須要加以判斷。
13.小差別:o-c中對於一個方法,若是變量是空的,那麼方法自動不執行,而c++中注意中斷,應該注意防護性編程
14.batchnode的使用
15.類型識別感受挺好使的方法:dynamic_cast<>動態轉換,若是能夠轉成某個父類,則轉,不能夠就返回空值,比起getClassName()或者typeid安靜多了。
16.對於動畫來講,與-iphone中不一樣的是
CCAnimation *animation = CCAnimation::create(frameArray,0.1);//會報錯說是,元素類型錯誤
改爲
CCAnimation *animation = CCAnimation::createWithSpriteFrames(frameArray,0.1);//就行了
注:framArray是CCSpriteFrame的數組。
17.在使用CC前綴的類時,千萬要注意,記着retain()和release(),我由於這個出過好多錯,檢查變量不爲空,可是事實上裏邊的東西已經沒有了。必定要保持本身對這些變量的控制,我如今還沒顧上研究究竟在何時釋放掉的,可是在-iphone中沒問題的,在-x中確有問題,這讓我一度很糾結。
18.在define的時候切記上括號。
(原創做品,歡迎轉載,註明出處,謝謝:http://www.cnblogs.com/binxindoudou/admin/EditPosts.aspx?postid=3179335)