歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
您现在的位置: Linux教程網 >> UnixLinux >  >> Linux編程 >> Linux編程

cocos2d-x中繼承CCMenu定義自己的menu

在項目中為了寫一個有特殊效果的menu,於是想想,不就是幾個action嗎,回調一下就ok了,的確這樣實現了,關鍵在於這個項目中實在是灰常多的按鈕,寫了6、7個後,我吐血了,決定繼承CCmenu,自己定義一個,這樣就不用每個都寫了。  

原理很簡單,新建一個類繼承自CCMenu,重寫它的touch事件,加入自己的效果。

  1. bool MyMenu::ccTouchBegan(CCTouch* touch, CCEvent* event)  
  2. {  
  3.     CC_UNUSED_PARAM(event);  
  4.     if (m_eState != kCCMenuStateWaiting || ! m_bIsVisible)  
  5.     {  
  6.         return false;  
  7.     }  
  8.       
  9.     for (CCNode *c = this->m_pParent; c != NULL; c = c->getParent())  
  10.     {  
  11.         if (c->getIsVisible() == false)  
  12.         {  
  13.             return false;  
  14.         }  
  15.     }  
  16.       
  17.     m_pSelectedItem = this->itemForTouch(touch);  
  18.     if (m_pSelectedItem)  
  19.     {  
  20.         m_eState = kCCMenuStateTrackingTouch;  
  21.         m_pSelectedItem->selected();  
  22.         //這裡加入自己想要的效果。。。。。。。。。。。。。。。。   
  23.         return true;  
  24.     }  
  25.     return false;  
  26. }  
還沒有結束,我想要的是讓menu裡面的item有特效,那麼我還應該重寫它的menuWithItems方法。

一定要記得改變他的初始化方法,原來的初始化方法返回的是系統的CCMenu,要自己改為返回自己定義的Menu

  1. MyMenu * MyMenu::menuWithItems(CCMenuItem* item, ...)  
  2. {  
  3.     va_list args;  
  4.     va_start(args,item);  
  5.     MyMenu *pRet = new MyMenu();//這裡記得要注意   
  6.     if (pRet && pRet->initWithItems(item, args))  
  7.     {  
  8.         pRet->autorelease();  
  9.         va_end(args);  
  10.         return pRet;  
  11.     }  
  12.     va_end(args);  
  13.     CC_SAFE_DELETE(pRet)  
  14.     return NULL;  
  15. }  
  16.   
  17. MyMenu* MyMenu::menuWithItem(CCMenuItem* item)  
  18. {  
  19.     return menuWithItems(item, NULL);  
  20. }  

這樣你可以自己隨意改變裡面的m_pSelectedItem,要什麼效果,自己寫咯。

Copyright © Linux教程網 All Rights Reserved