1. 程式人生 > >Cocos2d-x文本菜單

Cocos2d-x文本菜單

reat blog ati text cursor 結束 void static 是把

文本菜單是菜單項僅僅是顯示文本,文本菜單類包含了MenuItemLabelMenuItemFontMenuItemAtlasFontMenuItemLabel是個抽象類,詳細使用的時候是使用MenuItemFontMenuItemAtlasFont兩個類。

文本菜單類MenuItemFont。它的當中一個創建函數create定義例如以下:

static MenultemAtlasFont*create  ( const std::string &  value, //要顯示的文本
 const ccMenuCallback & callback                             //菜單操作的回調函數指針
 )

文本菜單類MenuItemAtlasFont是基於圖片集的文本菜單項,它的當中一個創建函數create定義例如以下:

static MenuItemAtlasFont* create  ( const std::string &  value, //要顯示的文本
 const std::string & charMapFile,                                         //圖片集合文件
 int  itemWidth,                                                                       //要截取的文字在圖片中的寬度
 int  itemHeight,                                                             //要截取的文字在圖片中的高度
 char  startCharMap                                                      //菜單操作的回調函數指針
 )

這次我們會通過一個實例介紹一下文本菜單的使用,這個實比例如以下圖所看到的。當中菜單Start是使用MenuItemFont實現的,菜單Help是使用MenuItemAtlasFont實現的。

技術分享


以下我們看看HelloWorldScene.cppinit函數例如以下:

bool HelloWorld::init()
{
   if ( !Layer::init() )
   {
       return false;
   }
   
   Size visibleSize = Director::getInstance()->getVisibleSize();
   Point origin = Director::getInstance()->getVisibleOrigin();
   
    Sprite *bg =Sprite::create("menu/background.png");   
   bg->setPosition(Point(origin.x + visibleSize.width/2,
                             origin.y +visibleSize.height /2));
   this->addChild(bg);
 
   MenuItemFont::setFontName("Times New Roman");                                                       ①
   MenuItemFont::setFontSize(86);                                                                                      ②
   MenuItemFont *item1 = MenuItemFont::create("Start",
                                 CC_CALLBACK_1(HelloWorld::menuItem1Callback,this));                             ③
  
   
   MenuItemAtlasFont *item2 = MenuItemAtlasFont::create("Help",
                                        "menu/tuffy_bold_italic-charmap.png",48, 65, ‘ ‘,
                                   CC_CALLBACK_1(HelloWorld::menuItem2Callback,this));                         ④
   
   Menu* mn = Menu::create(item1, item2, NULL);                                                                         ⑤
   mn->alignItemsVertically();                                                                                               ⑥
   this->addChild(mn);                                                                                                         ⑦
   
   return true;
}

上述代碼第①和②行是設置文本菜單的文本字體和字體大小。第③行代碼是創建MenuItemFont菜單項對象,它是一個一般文本菜單,create是函數的第一個參數是菜單項的文本內容。第二個參數是點擊菜單項回調的函數指針。當中CC_CALLBACK_1宏是定義一個回調函數,並函數與對象綁定在一起,1表示這個函數有一個輸出參數。HelloWorld::menuItem1Callback是函數指針,this代表函數所在的對象。

HelloWorld::menuItem1Callback須要在HelloWorld.h頭文件裏聲明,HelloWorld.h頭文件代碼例如以下:

#include "cocos2d.h"
 
class HelloWorld : public cocos2d::Layer
{
public:
   
   virtual bool init();
   static cocos2d::Scene* scene();  
 
    void menuItem1Callback(cocos2d::Ref*pSender);
    void menuItem2Callback(cocos2d::Ref*pSender);
 
   CREATE_FUNC(HelloWorld);
};

回調函數代碼例如以下。函數中的參數是菜單項MenuItem的實例。

void HelloWorld::menuItem1Callback(Ref*pSender)
{
   MenuItem* item = (MenuItem*)pSender;
        log("TouchStart Menu Item %p", item);
}
 
void HelloWorld::menuItem2Callback(Ref*pSender)
{
   MenuItem* item = (MenuItem*)pSender;
        log("TouchHelp Menu Item %p", item);
}

HelloWorldScene.cppinit函數中第④行代碼是創建一個MenuItemAtlasFont菜單項對象。這樣的菜單項是基於圖片集的菜單項。

MenuItemAtlasFont須要將圖片集放到資源文件夾Resources下。在本例中我們是將全部的圖片都放到一個Resources下的menu文件夾中,所以create函數的第二個參數是"menu/tuffy_bold_italic-charmap.png",要求帶有menu路徑。

還有第⑤行代碼Menu* mn = Menu::create(item1, NULL)是創建菜單對象,把之前創建的菜單項加入到菜單中。create函數中有是這些菜單項的數組。最後要用NULL結束。

第⑥行代碼mn->alignItemsVertically()是設置菜單項垂直對齊。

第⑦行代碼是this->addChild(mn,1,2)是把菜單對象加入到當前層中。

很多其它內容請關註最新Cocos圖書《Cocos2d-x實戰 C++卷》本書交流討論站點:http://www.cocoagame.net
很多其它精彩視頻課程請關註智捷課堂Cocos課程:http://v.51work6.com
歡迎加入Cocos2d-x技術討論群:257760386


《Cocos2d-x實戰 C++卷》現已上線。各大商店均已開售:

京東:http://item.jd.com/11584534.html

亞馬遜:http://www.amazon.cn/Cocos2d-x%E5%AE%9E%E6%88%98-C-%E5%8D%B7-%E5%85%B3%E4%B8%9C%E5%8D%87/dp/B00PTYWTLU

當當:http://product.dangdang.com/23606265.html

互動出版網:http://product.china-pub.com/3770734

《Cocos2d-x實戰 C++卷》源代碼及樣章下載地址:

源代碼下載地址:

mod=viewthread&tid=1155&extra=page%3D1%20" style="color: rgb(51, 102, 153); text-decoration: none;">http://51work6.com/forum.php?mod=viewthread&tid=1155&extra=page%3D1

樣章下載地址:http://51work6.com/forum.php?

mod=viewthread&tid=1157&extra=page%3D1

歡迎關註智捷iOS課堂微信公共平臺技術分享

Cocos2d-x文本菜單