轉載請註明,原文地址: http://blog.csdn.net/musicvs/article/details/8242963ide
1. 按鈕建立函數
[cpp] view plain copy print ? this
/* 正常狀態下的按鈕圖片 */ spa
CCScale9Sprite* btnNormal = CCScale9Sprite::create("button.png"); .net
/* 點擊狀態下的按鈕圖片 */ 指針
CCScale9Sprite* btnDown = CCScale9Sprite::create("buttonHighlighted.png"); orm
/* 按鈕標題 */ blog
CCLabelTTF *title = CCLabelTTF::create("Touch Me!3324234", "Marker Felt", 30); 事件
/* 按鈕的大小會根據標題自動調整 */ 圖片
CCControlButton* controlBtn = CCControlButton::create(title, btnNormal);
/* 設置按鈕按下時的圖片 */
controlBtn->setBackgroundSpriteForState(btnDown, CCControlStateSelected);
controlBtn->setPosition(ccp(200, 200));
this->addChild(controlBtn);
其實代碼很簡單,兩張圖片,分別是按鈕正常狀態和點擊狀態圖片,固然,她們都是九妹圖片~
而後是一個標題標籤,固然了,若是按鈕沒有標題,呢誰知道是什麼做用呢~
最後要界面一個新的傢伙: CCControlButton。
我是這麼理解的,CCControlButton它只是一個空殼,它具有不少按鈕所須要的功能(點擊事件什麼的),而後九妹圖片和標題標籤是內容,把內容添加到這個空殼裏,一個按鈕就誕生了:
可是有一點要注意,按鈕的大小是根據標籤內容進行縮放的,那,若是我想讓按鈕的大小固定呢?畢竟不是全部人都喜歡變化~!
很簡單,就一句話:
[cpp] view plain copy print ?
/* 強制設置按鈕大小,若是按鈕標題大小超過這個範圍,則會自動擴大 */
controlBtn->setPreferredSize(CCSize(300, 50));
搞定~
2. 按鈕事件
按鈕怎麼可能少了點擊事件呢?~這個很簡單,直接看代碼,註釋已經很詳細了。
[cpp] view plain copy print ?
/* 當鼠標處於按下並曾經點中按鈕時,則觸發一次 */
controlBtn->addTargetWithActionForControlEvents(this, cccontrol_selector(HelloWorld::touchDownAction), CCControlEventTouchDown);
/* 當鼠標處於按下並曾經點中按鈕的狀態下,鼠標進入按鈕範圍,則觸發一次 */
controlBtn->addTargetWithActionForControlEvents(this, cccontrol_selector(HelloWorld::touchDragEnter), CCControlEventTouchDragEnter);
/* 當鼠標處於按下並曾經點中按鈕的狀態下,鼠標離開按鈕範圍,則觸發一次 */
controlBtn->addTargetWithActionForControlEvents(this, cccontrol_selector(HelloWorld::touchDragExit), CCControlEventTouchDragExit);
/* 當鼠標處於按下並曾經點中按鈕的狀態下,鼠標進入按鈕範圍,則觸發,只要達到條件,就不斷觸發 */
controlBtn->addTargetWithActionForControlEvents(this, cccontrol_selector(HelloWorld::touchDragInside), CCControlEventTouchDragInside);
/* 當鼠標處於按下並曾經點中按鈕的狀態下,鼠標離開按鈕範圍,則觸發,只要達到條件,就不斷觸發 */
controlBtn->addTargetWithActionForControlEvents(this, cccontrol_selector(HelloWorld::touchDragOutside), CCControlEventTouchDragOutside);
/* 當鼠標處於按下並曾經點中按鈕的狀態下,鼠標鬆開且在按鈕範圍內,則觸發一次 */
controlBtn->addTargetWithActionForControlEvents(this, cccontrol_selector(HelloWorld::touchUpInside), CCControlEventTouchUpInside);
/* 當鼠標處於按下並曾經點中按鈕的狀態下,鼠標鬆開且在按鈕範圍外,則觸發一次 */
controlBtn->addTargetWithActionForControlEvents(this, cccontrol_selector(HelloWorld::touchUpOutside), CCControlEventTouchUpOutside);
/* 暫時沒有發現能用鼠標觸發這個事件的操做,看了註釋,應該是由其它事件中斷按鈕事件而觸發的 */
controlBtn->addTargetWithActionForControlEvents(this, cccontrol_selector(HelloWorld::touchCancel), CCControlEventTouchCancel);
回調函數是這樣的:
[cpp] view plain copy print ?
void touchDownAction(CCObject* pSender, CCControlEvent event);
void touchDragEnter(CCObject* pSender, CCControlEvent event);
void touchDragExit(CCObject* pSender, CCControlEvent event);
void touchDragInside(CCObject* pSender, CCControlEvent event);
void touchDragOutside(CCObject* pSender, CCControlEvent event);
void touchUpInside(CCObject* pSender, CCControlEvent event);
void touchUpOutside(CCObject* pSender, CCControlEvent event);
void touchCancel(CCObject* pSender, CCControlEvent event);
惟一要注意的是,CCControlEvent 不是指針,千萬不要習慣了就給它加一個*號~