閱讀250 返回首頁    go 阿裏雲 go 技術社區[雲棲]


cocos2dx涓彍鍗曞搷搴斿洖璋冪殑瀹炵幇鍘熺悊-鍗氬-浜戞爾紺懼尯-闃塊噷浜?

鍓嶈█锛氳繖鍑犲ぉ鍦ㄥ仛cocos2dx涓婄殑璺ㄥ鉤鍙扮殑socket搴擄紝鐪嬫潵鐪嬪幓涔熷彧鑳界敤BSD鍘誨疄鐜頒簡銆傚洜涓鴻鎺ユ敹鏈嶅姟鍣ㄧ殑鎺ㄩ€佹秷鎭紝鎵€浠ヨ鍋氭垚寮傛澶勭悊銆備篃鍙傝€冧簡寰堝鍒漢鐨勬枃絝狅紝鏈潵鏄兂鑳芥湁涓疆瀛愮洿鎺ョ粰鎴戠敤鐨勶紝鐪嬫潵榪樻槸寰楄嚜宸遍噸澶嶉€犱笅銆傜洰鍓嶇殑鎯蟲硶鏄皝瑁呬竴涓笟鍔″眰锛屽唴閮ㄥ寘鍚竴涓猻ocket灝佽锛屼嬌鐢╬thread璧蜂竴涓嚎紼嬪幓select鎺ユ敹鏁版嵁锛屽綋鏈夋暟鎹埌杈炬椂锛岃皟鐢ㄤ笟鍔″眰鐨勫嚱鏁板鐞嗘暟鎹€備笟鍔″眰娉ㄥ唽鏈夌晫闈㈠眰鐨勫洖璋冨嚱鏁幫紝鐒跺悗棰勫鐞嗗畬姣曞悗鐩存帴涓㈢粰瀵瑰簲鐨勭晫闈㈠洖璋冨嚱鏁板鐞嗐€備絾鏄腑閫旂紪璿戜笂閬囧埌浜嗛棶棰橈紝褰撲粖澶╃湅浜嗕笅cocos2dx鍐呴儴瀵瑰簲鐨勮彍鍗曞搷搴斾簨浠舵墠鎼炴噦鍘熸潵鏄繖鏍峰紕鐨勩€?/span>

鍏跺疄榪欎釜闂鍙互綆€鍗曞緱鐪嬫垚鏄疉綾繪敞鍐屼簡B綾葷殑鍥炶皟鍑芥暟锛屽綋A綾誨璞℃帴鏀跺埌瀵瑰簲鐨勪簨浠跺悗锛岀洿鎺ヨ皟鐢˙綾葷殑鍥炶皟鍑芥暟澶勭悊銆傛湰鏉ュ洖璋冨嚱鏁板氨鏄粰C璿█鐨勮鑼冿紝鍥犱負鍒頒簡C++閲岄潰鏈夊璞″璞$殑姒傚康鍚庯紝姣忎釜鎴愬憳瀵矽薄璋冪敤鐨勬椂鍊欓兘闅愬惈浜嗕竴涓猼his鎸囬拡锛屽綋鐒訛紝A綾繪槸涓嶅叿鏈塀綾葷殑鍥炶皟鍑芥暟瀹炵幇鐨勶紝鑷劧緙栬瘧鐨勬椂鍊欏氨浼氭湁闂銆?/p>

鐪嬪埌緗戜笂涔熸湁寰堝瑙e喅鏂規硶锛屽叾涓渶鐗涙皵鐨勪竴涓氨鏄敤涓€涓猼hunk瑙e喅锛岃繖涓湁鐐歸珮絝紝鍥犱負鏄洿鎺ラ€氳繃姹囩紪浠g爜淇敼EAX瀵勫瓨鍣ㄧ殑鍊兼潵瀹炵幇榪欎釜this鎸囬拡鐨勯棶棰橈紝鎬曚笉閫氱敤锛屽叾瀹炴渶楹葷儲鐨勬槸瀵矽繖涓笉鐔熸倝锛屽埌鏃跺€欏嚭闂閮戒笉鐭ラ亾濡備綍瑙e喅锛屾兂鎯寵繕鏄綔緗€傚叾瀹炲紑濮嬬殑鏃跺€欏氨鏈変漢鎻愬埌鍙互鎶婅皟鐢ㄧ殑this鎸囬拡鏇挎崲鎴愬洖璋冨嚱鏁扮殑鐪熸鎷ユ湁鑰咃紝褰撴椂娌$悊瑙o紝鐜板湪緲葷湅浜哻ocos2dx鐨勪唬鐮佹墠鍙戠幇锛岃繖璐у氨鏄繖涔堟悶鐨勶紒褰撴椂鎴戣繕瑙夊緱寰堢濂囷紝鍘熸潵涔熸槸榪欑鍦熷姙娉曪紝鍛靛懙銆傚氨鎷緾CMenuItemImage鍋氫緥瀛愬ソ浜嗐€?/p>

鐪嬩笅CCMenuItem鐨勭被瀹氫箟锛?/p>

[cpp]view plaincopy
  1. class聽CC_DLL聽CCMenuItem聽:聽public聽CCNodeRGBA聽聽
  2. {聽聽
  3. protected:聽聽
  4. 聽聽聽聽/**聽whether聽or聽not聽the聽item聽is聽selected
  5. 聽聽聽聽聽@since聽v0.8.2
  6. 聽聽聽聽聽*/聽聽
  7. 聽聽聽聽bool聽m_bSelected;聽聽
  8. 聽聽聽聽bool聽m_bEnabled;聽聽
  9. 聽聽
  10. public:聽聽
  11. 聽聽聽聽CCMenuItem()聽聽
  12. 聽聽聽聽:聽m_bSelected(false)聽聽
  13. 聽聽聽聽,聽m_bEnabled(false)聽聽聽聽聽聽聽聽聽聽聽聽聽聽
  14. 聽聽聽聽,聽m_pListener(NULL)聽聽聽聽聽聽聽聽聽聽聽聽聽聽
  15. 聽聽聽聽,聽m_pfnSelector(NULL)聽聽
  16. 聽聽聽聽,聽m_nScriptTapHandler(0)聽聽
  17. 聽聽聽聽{}聽聽
  18. 聽聽聽聽virtual聽~CCMenuItem();聽聽
  19. 聽聽
  20. 聽聽聽聽/**聽Creates聽a聽CCMenuItem聽with聽no聽target/selector聽*/聽聽
  21. 聽聽聽聽static聽CCMenuItem*聽create();聽聽
  22. 聽聽聽聽/**聽Creates聽a聽CCMenuItem聽with聽a聽target/selector聽*/聽聽
  23. 聽聽聽聽static聽CCMenuItem*聽create(CCObject聽*rec,聽SEL_MenuHandler聽selector);聽聽
  24. 聽聽聽聽/**聽Initializes聽a聽CCMenuItem聽with聽a聽target/selector聽*/聽聽
  25. 聽聽聽聽bool聽initWithTarget(CCObject聽*rec,聽SEL_MenuHandler聽selector);聽聽
  26. 聽聽聽聽/**聽Returns聽the聽outside聽box聽*/聽聽
  27. 聽聽聽聽CCRect聽rect();聽聽
  28. 聽聽聽聽/**聽Activate聽the聽item聽*/聽聽
  29. 聽聽聽聽virtualvoid聽activate();聽聽
  30. 聽聽聽聽/**聽The聽item聽was聽selected聽(not聽activated),聽similar聽to聽"mouse-over"聽*/聽聽
  31. 聽聽聽聽virtualvoid聽selected();聽聽
  32. 聽聽聽聽/**聽The聽item聽was聽unselected聽*/聽聽
  33. 聽聽聽聽virtualvoid聽unselected();聽聽
  34. 聽聽聽聽聽聽
  35. 聽聽聽聽/**聽Register聽menu聽handler聽script聽function聽*/聽聽
  36. 聽聽聽聽virtualvoid聽registerScriptTapHandler(int聽nHandler);聽聽
  37. 聽聽聽聽virtualvoid聽unregisterScriptTapHandler(void);聽聽
  38. 聽聽聽聽int聽getScriptTapHandler()聽{聽return聽m_nScriptTapHandler;聽};聽聽
  39. 聽聽
  40. 聽聽聽聽virtualbool聽isEnabled();聽聽
  41. 聽聽聽聽//@note:聽It's聽'setIsEnable'聽in聽cocos2d-iphone.聽聽聽
  42. 聽聽聽聽virtualvoid聽setEnabled(bool聽value);聽聽
  43. 聽聽聽聽virtualbool聽isSelected();聽聽
  44. 聽聽聽聽聽聽
  45. 聽聽聽聽virtualvoid聽setOpacityModifyRGB(bool聽bValue)聽{CC_UNUSED_PARAM(bValue);}聽聽
  46. 聽聽聽聽virtualbool聽isOpacityModifyRGB(void)聽{聽returnfalse;}聽聽
  47. 聽聽聽聽聽聽
  48. 聽聽聽聽/**聽set聽the聽target/selector聽of聽the聽menu聽item*/聽聽
  49. 聽聽聽聽void聽setTarget(CCObject聽*rec,聽SEL_MenuHandler聽selector);聽聽
  50. 聽聽
  51. protected:聽聽
  52. 聽聽聽聽CCObject*聽聽聽聽聽聽聽m_pListener;聽聽聽聽聽聽//聽鍥炶皟鍑芥暟鎷ユ湁鑰?/span>聽聽
  53. 聽聽聽聽SEL_MenuHandler聽聽聽聽m_pfnSelector;聽//聽鍥炶皟鍑芥暟聽聽
  54. 聽聽聽聽int聽聽聽聽聽聽聽聽聽聽聽聽聽m_nScriptTapHandler;聽聽
  55. };聽聽

鍏朵腑鏈変袱涓緢鍏抽敭鐨勬垚鍛樺彉閲忥紝CCObject* m_pListener 鍜?SEL_MenuHandler m_pfnSelector銆傛潵鐪嬩笅SEL_MenuHandler鐨勫畾涔夛細

[cpp]view plaincopy
  1. typedefvoid聽(CCObject::*SEL_MenuHandler)(CCObject*);聽聽
  2. 聽聽
  3. #define聽menu_selector(_SELECTOR)聽(SEL_MenuHandler)(&_SELECTOR)聽聽

鏄殑锛岃繖涓氨鏄洖璋冨嚱鏁扮殑綾誨瀷锛岀劧鍚庝笅闈㈢殑瀹忓畾涔夋槸涓轟簡鏂逛究鍨掍唬鐮佺敤鐨勩€?/p>

鍐嶆潵鐪嬬湅娉ㄥ唽鐨勪唬鐮侊細

[cpp]view plaincopy
  1. CCMenuItemImage聽*聽CCMenuItemImage::create(constchar聽*normalImage,聽constchar聽*selectedImage)聽聽
  2. {聽聽
  3. 聽聽聽聽return聽CCMenuItemImage::create(normalImage,聽selectedImage,聽NULL,聽NULL,聽NULL);聽聽
  4. }聽聽
  5. 聽聽
  6. CCMenuItemImage聽*聽CCMenuItemImage::create(constchar聽*normalImage,聽constchar聽*selectedImage,聽CCObject*聽target,聽SEL_MenuHandler聽selector)聽聽
  7. {聽聽
  8. 聽聽聽聽return聽CCMenuItemImage::create(normalImage,聽selectedImage,聽NULL,聽target,聽selector);聽聽
  9. }聽聽
  10. 聽聽
  11. CCMenuItemImage聽*聽CCMenuItemImage::create(constchar聽*normalImage,聽constchar聽*selectedImage,聽constchar聽*disabledImage,聽CCObject*聽target,聽SEL_MenuHandler聽selector)聽聽
  12. {聽聽
  13. 聽聽聽聽CCMenuItemImage聽*pRet聽=聽new聽CCMenuItemImage();聽聽
  14. 聽聽聽聽if聽(pRet聽&&聽pRet->initWithNormalImage(normalImage,聽selectedImage,聽disabledImage,聽target,聽selector))聽聽
  15. 聽聽聽聽{聽聽
  16. 聽聽聽聽聽聽聽聽pRet->autorelease();聽聽
  17. 聽聽聽聽聽聽聽聽return聽pRet;聽聽
  18. 聽聽聽聽}聽聽
  19. 聽聽聽聽CC_SAFE_DELETE(pRet);聽聽
  20. 聽聽聽聽return聽NULL;聽聽
  21. }聽聽
  22. 聽聽
  23. bool聽CCMenuItemImage::initWithNormalImage(constchar聽*normalImage,聽constchar聽*selectedImage,聽constchar聽*disabledImage,聽CCObject*聽target,聽SEL_MenuHandler聽selector)聽聽
  24. {聽聽
  25. 聽聽聽聽CCNode聽*normalSprite聽=聽NULL;聽聽
  26. 聽聽聽聽CCNode聽*selectedSprite聽=聽NULL;聽聽
  27. 聽聽聽聽CCNode聽*disabledSprite聽=聽NULL;聽聽
  28. 聽聽
  29. 聽聽聽聽if聽(normalImage)聽聽
  30. 聽聽聽聽{聽聽
  31. 聽聽聽聽聽聽聽聽normalSprite聽=聽CCSprite::create(normalImage);聽聽
  32. 聽聽聽聽}聽聽
  33. 聽聽
  34. 聽聽聽聽if聽(selectedImage)聽聽
  35. 聽聽聽聽{聽聽
  36. 聽聽聽聽聽聽聽聽selectedSprite聽=聽CCSprite::create(selectedImage);聽聽
  37. 聽聽聽聽}聽聽
  38. 聽聽聽聽聽聽
  39. 聽聽聽聽if(disabledImage)聽聽
  40. 聽聽聽聽{聽聽
  41. 聽聽聽聽聽聽聽聽disabledSprite聽=聽CCSprite::create(disabledImage);聽聽
  42. 聽聽聽聽}聽聽
  43. 聽聽聽聽return聽initWithNormalSprite(normalSprite,聽selectedSprite,聽disabledSprite,聽target,聽selector);聽聽
  44. }聽聽

鏈€鍚庡弽姝e氨鏄皟鐢ㄤ笅闈㈢殑涓€涓疄鐜板洖璋冨嚱鏁版敞鍐屻€?/p>

[cpp]view plaincopy
  1. //聽鍚庢湡娉ㄥ唽聽聽
  2. void聽CCMenuItem::setTarget(CCObject聽*rec,聽SEL_MenuHandler聽selector)聽聽
  3. {聽聽
  4. 聽聽聽聽m_pListener聽=聽rec;聽聽
  5. 聽聽聽聽m_pfnSelector聽=聽selector;聽聽
  6. }聽聽
  7. 聽聽
  8. //聽鍒濇湡緇戝畾聽聽
  9. CCMenuItem*聽CCMenuItem::create(CCObject聽*rec,聽SEL_MenuHandler聽selector)聽聽
  10. {聽聽
  11. 聽聽聽聽CCMenuItem聽*pRet聽=聽new聽CCMenuItem();聽聽
  12. 聽聽聽聽pRet->initWithTarget(rec,聽selector);聽聽
  13. 聽聽聽聽pRet->autorelease();聽聽
  14. 聽聽聽聽return聽pRet;聽聽
  15. }聽聽
  16. 聽聽
  17. bool聽CCMenuItem::initWithTarget(CCObject聽*rec,聽SEL_MenuHandler聽selector)聽聽
  18. {聽聽
  19. 聽聽聽聽setAnchorPoint(ccp(0.5f,聽0.5f));聽聽
  20. 聽聽聽聽m_pListener聽=聽rec;聽聽
  21. 聽聽聽聽m_pfnSelector聽=聽selector;聽聽
  22. 聽聽聽聽m_bEnabled聽=聽true;聽聽
  23. 聽聽聽聽m_bSelected聽=聽false;聽聽
  24. 聽聽聽聽returntrue;聽聽
  25. }聽聽
濂戒簡锛屽氨榪欎箞緇戝畾璧鋒潵浜嗭紝璋冪敤鐨勬椂鍊欎篃鐗圭畝鍗曪紝鐪嬪涓嬩唬鐮侊細

[cpp]view plaincopy
  1. void聽CCMenuItem::activate()聽聽
  2. {聽聽
  3. 聽聽聽聽if聽(m_bEnabled)聽聽
  4. 聽聽聽聽{聽聽
  5. 聽聽聽聽聽聽聽聽if聽(m_pListener聽&&聽m_pfnSelector)聽聽
  6. 聽聽聽聽聽聽聽聽{聽聽
  7. 聽聽聽聽聽聽聽聽聽聽聽聽(m_pListener->*m_pfnSelector)(this);聽聽聽聽//聽鐩存帴璋冪敤浜嗕究鏄?/span>聽聽
  8. 聽聽聽聽聽聽聽聽}聽聽
  9. 聽聽聽聽聽聽聽聽聽聽
  10. 聽聽聽聽聽聽聽聽if聽(kScriptTypeNone聽!=聽m_eScriptType)聽聽
  11. 聽聽聽聽聽聽聽聽{聽聽
  12. 聽聽聽聽聽聽聽聽聽聽聽聽CCScriptEngineManager::sharedManager()->getScriptEngine()->executeMenuItemEvent(this);聽聽
  13. 聽聽聽聽聽聽聽聽}聽聽
  14. 聽聽聽聽}聽聽
  15. }聽聽

(m_pListener->*m_pfnSelector)(this); 榪欏彞鍙兘瑕佺◢寰В閲婁笅锛屽叾瀹炰篃鎸哄ソ鎳傜殑銆傞鍏堝墠闈㈣繖涓嫭鍙峰氨鏄搴旂殑鍑芥暟锛屽悗闈㈢殑this灝辨槸鍙傛暟锛岃繖涓弧瓚衝鍑芥暟鎸囬拡鐨勫畾涔夛紝鍗硋oid (CCObject::*)(CCObject*); 鍥犱負CCMenuItem鍩虹被鏄疌CObject锛岄偅鍏跺疄璋冪敤鐨勫満鏅?CScene)鍩虹被涔熶竴鏍楓€傜劧鍚庡氨鏄痬_pListener->*m_pfnSelector榪欎釜浜嗭紝鍓嶉潰鐨凩istener搴旇娌″暐鐤戣锛屽叧閿槸*m_pfnSelector鍙兘鏈変簺浜轟細鎳碉紝鍏跺疄涔熷緢綆€鍗曪紝m_pfnSelector鏄嚱鏁版寚閽堬紝棣栧厛浠栨槸涓寚閽堬紝瀛樼殑鏄釜鍦板潃锛岀劧鍚?鑷劧鏄彇瀵瑰簲鍦板潃鍐呯殑鍐呭锛堝嚱鏁板湴鍧€锛夛紝瀵逛簬鍑芥暟璋冪敤鏉ヨ锛屽叾瀹炲氨鏄皟鐢ㄤ竴涓湴鍧€锛岃€宮_pListener->m_pfnSelector鏄庢樉鏄敊璿殑锛屽洜涓鴻皟鐢ㄨ€呮病鏈塵_pfnSelector榪欎釜鎴愬憳鍙橀噺锛屼粬鍙湁瀵瑰簲榪欎釜鎸囬拡鍐呴儴瀛樺偍鐨勫嚱鏁板湴鍧€瀵瑰叾鏄湁鏁堢殑銆?/p> 欏轟究鎶婅皟鐢╝ctive鐨勪唬鐮佷篃鏀句竴涓嬫洿娓呮锛?/span>

[cpp]view plaincopy
  1. void聽CCMenu::ccTouchEnded(CCTouch聽*touch,聽CCEvent*聽event)聽聽
  2. {聽聽
  3. 聽聽聽聽CC_UNUSED_PARAM(touch);聽聽
  4. 聽聽聽聽CC_UNUSED_PARAM(event);聽聽
  5. 聽聽聽聽CCAssert(m_eState聽==聽kCCMenuStateTrackingTouch,聽"[Menu聽ccTouchEnded]聽--聽invalid聽state");聽聽
  6. 聽聽聽聽if聽(m_pSelectedItem)聽聽
  7. 聽聽聽聽{聽聽
  8. 聽聽聽聽聽聽聽聽m_pSelectedItem->unselected();聽聽
  9. 聽聽聽聽聽聽聽聽m_pSelectedItem->activate();聽聽聽聽//聽灝辨槸榪欓噷聽聽
  10. 聽聽聽聽}聽聽
  11. 聽聽聽聽m_eState聽=聽kCCMenuStateWaiting;聽聽
  12. }聽聽
ccTouchEnded榪欑鍙嶆灝辨槸鍝嶅簲灞忓箷鐨勬搷浣滀簡锛屽啀緗戜笂鎴戝氨涓嶈創浜嗭紝鑷繁鎵炬壘涔熻兘鎵懼埌鐨勩€?/span>

最後更新:2017-04-03 12:56:18

  上一篇:go Memcache Key 設計技巧及注意事項
  下一篇:go ViewController deallocted 而造成崩潰的問題