阅读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 而造成崩溃的问题