Cocos2d-x之MenuItem,cocos2d-xmenuitem

來源:互聯網
上載者:User

Cocos2d-x之MenuItem,cocos2d-xmenuitem

***************************************轉載請註明出處:http://blog.csdn.net/lttree********************************************


心情:唉,這幾天做一個安卓APP介面有點頭痛,糾結ING,第一次做啊,有點無從下手ING。。


本文:

      上回說了Scene和Layer,這次來耍耍MenuItem,進行一下情境的切換。

還記得Scene的那張圖片嗎?


Scene一部分Layer另外一部分就是Menu了。

Menu就是菜單嘛,一個圖層一個菜單,多符合我們觀點啊,這個引擎還是挺人性化di~

Menu其實是一個容器,它裝載著一些菜單,Menu不能作為菜單的一個按鈕,

類似於:Menu就像一個籃子,裡面可以裝各種水果,但它本身不是水果。

對於,Menu,API上也有一個類繼承圖:


可以看到,其實Menu是Layer的一個子類。

也就是說,Menu也可以接受觸屏事件,它的優先順序為-128,優先順序相當高!(值越小,優先順序越高)

所以,一般它的觸屏時間會優於一般Layer。

恩,接下來說 cocos2d-x的button,也就是MenuItem:


恩,MenuItem是Node類的子類,它有三個子類,分別是:

MenuItemLabel           字元標籤菜單

MenuItemSprite          圖片菜單

MenuItemToggle         開關菜單

恩,再來分別說一下。


①.MenuItemLabel    使用文字菜單建立的功能表項目

API中解釋:

            一個"label"形式的標籤功能表項目項目的抽象類別,任何支援LabelProtocol協議的節點都可以添加進來。


要注意一下,LabelProtocol有四個分支,其中第一個分支Label是cocos2d-x  3.0 新加進來的,

在2.x的系列中,有三種文本,分別是LabelTTF,LabelBMFont和LabelAtlas。其中3.0尤其提倡使用Lable代替LabelTTF和LabelBMFont,因為Label在渲染速度上較其快。

接下來,看看這四種:


1.Label::createWithTTF ---- 這是需要使用ttf格式字型檔的建立方式

來測試一下吧:

//擷取螢幕的長寬Size visibleSize = Director::getInstance()->getVisibleSize();    Point origin = Director::getInstance()->getVisibleOrigin();TTFConfig config("fonts/HelloKitty.ttf", 50); auto label1 = Label::createWithTTF(config, "Hello Cocos2d-x");label1->setPosition(Point(visibleSize.width/2, visibleSize.height*0.8));this->addChild(label1);


TTFConfig  將字型類型匯入,第一個參數表示存放位置,就是字型的ttf檔案,我上網下載了一個HelloKitty版本的  = =~(粉粉噠~),第二個參數是大小。

然後下面建立Label,用自己做的config來展現我們所需要輸出的內容。

接下來,兩步,老樣子,設定位置,然後加入到本層中,看一看我們做出來的吧~


這個字型....果真是HelloKitty啊  O(∩_∩)O~


2.Label::createWithSystemFont ----- 這是使用系統內建的字型進行建立,和原來2.x中的TTF類似

調用系統內建的字型,代碼是:

auto label2=Label::createWithSystemFont("Hello Cocos2d-x","Impact 常規",25);label2->setPosition(Point(visibleSize.width/2,visibleSize.height*0.7));this->addChild(label2);

當然,前面visibleSize 這個擷取螢幕大小的不要忘了喲,這裡就不重複寫了。

這個方法就是可以調用系統內建的字型,三個必備參數,第一個  輸出內容,第二個  調用字型的名稱,第三個  輸出字型的大小。

如果不知道自己系統有什麼字型:

Windows使用者,可以在 C盤Windows檔案夾下Fonts檔案夾中查看。

另外,如我的範例,字型名稱中包含中文是沒有問題的



3.Label::createWithBMFont ----  通過靜態字型檔建立文本的方式,產生fnt檔案和對應的png圖片

這個就是用自己建立的字型,.fnt和.png圖片,.png是各個能輸出字元的圖片,.fnt存的是某個字元在Png中存放的位置,

具體關於製作fnt可以看這個 -> http://blog.csdn.net/qiurisuixiang/article/details/8984288

代碼大概是這樣的:

auto label3 = Label::createWithBMFont("fonts/myfont.fnt","Hello Cocos2d-x");label3->setPosition(Point(visibleSize.width/2,visibleSize.height*0.4));this->addChild(label3);

第一個參數是檔案存放的位置(.fnt 和 .png),第二個參數就是要輸出的內容。



4.Label::createWithCharMap ---- 這個是和2.x中Atlas形式建立對應的。不過這種有兩種形式匹配圖片中的文字,一種是直接設定每一塊字型的寬高數值擷取,另一種是通過fnt檔案的方式,但原理都是一樣的。

這種建立,需要有plist檔案或者plist檔案裡面的值ItemHeight(每一個文字的高度)itemWidth(每個文字的寬度),startCharMap(文字起始ascii碼)

一般這種的圖只會用來裝飾數字和字母。

所以,這種建立方式關鍵就是獲得每個文字的高度,寬度,無論存於.png還是.plist就無所謂了。

這個範例就沒有弄了。。。

大概代碼形式是這樣子的:

// .plistauto label4 = Label::createWithCharMap(".plist檔案存放位置");label4->setPosition(Point(visibleSize.width / 2, visibleSize.height*0.2));addChild(label4);label4->setString("Cocos2d-x");// .pngauto label4 = Label::createWithCharMap("png存放位置", 每個字高度, 每個字寬度,起始的ASCII 碼);label4->setPosition(Point(visibleSize.width / 2, visibleSize.height*0.2));addChild(label4);label4->setString("Cocos2d-x");

每個的最後一行就是要顯示的內容了。


恩,這次就到這裡了,講了下MenuItem的一些東東。


***************************************轉載請註明出處:http://blog.csdn.net/lttree********************************************


cocos2d-x中的CCMenuItemToggle::itemWithTarget被廢棄了

我在2.14版本中是用這個createWithTarget函數替代了,
CCMenuItemToggle *toggle=CCMenuItemToggle::createWithTarget(this,//回呼函數所在的類
menu_selector(HelloWorld::hello),//回呼函數
可以正確運行
 
cocos2d-x 怎判斷單擊與長按?

在ccTouchesBegan和ccTouchesEnded中記錄觸摸點的時間
在ccTouchesEnded判斷時間間隔 如2秒以上為長按,以下為單擊
 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.