說道遊戲, 有個我們不得不說的控件, 菜單控件(CCMenu), 平常我們與遊戲很多的交互都來自於菜單, 菜單是遊戲中不可或缺的一部分, 我們今天就來看看菜單控件,
用法:
CCMenu::create( 菜單項1, 菜單項2..., NULL);
我們開始創建菜單( 旁白: 騙子, 根本就不行嘛)
別急, 我們先來看看參數, 哦 又是一個可變長參數, 結尾又要用NULL表示, 前面的參數是傳進來的菜單項, 表示我們創建了哪些菜單
我們先來看看有哪些
CCMenuItemImage::create( "沒有點擊的時候顯示的圖片", "點擊的時候顯示的圖片", 目標對象(一般寫this), menu_selector(回調函數));//用來創建圖片菜單
CCMenuItemFont::::create( "顯示的文字", 目標對象(一般寫this), menu_selector(回調函數));//用來創建文字菜單, 顯示的文字也可以使用字體標籤, 當然, 我們得換成CCMenuItemLabel
CCMenuItemToggle::createWithTarget( 目標對象(一般寫this), menu_selector(回調函數), 可變長參數表(CCMenuItem對象), NULL);//用來創建開關菜單
我們找兩張圖片啊:
再寫菜單之前, 我們創建兩個函數( 旁白: 明明就是三個嘛), 用來點擊菜單時候的調用這些函數:
在頭文件里加上:
void menuCloseCallback(CCObject* pSender);
void font( CCObject* pSender);
void toggle( CCObject* pSender);
在cpp文件裏實現:
void HelloWorld::menuCloseCallback(CCObject* pSender)
{
CCLOG( "imageMenu");
}
void HelloWorld::font( CCObject* pSender)
{
CCLOG( "<span style="font-family: Arial, Helvetica, sans-serif;">fontMenu</span><span style="font-family: Arial, Helvetica, sans-serif;">");</span>
}
void HelloWorld::toggle( CCObject* pSender)
{
CCLOG( "<span style="font-family: Arial, Helvetica, sans-serif;">toggleMenu</span><span style="font-family: Arial, Helvetica, sans-serif;">");</span>
}
CCMenuItemImage* imgMenu = CCMenuItemImage::create( "CloseNormal.png",
"CloseSelected.png",
this,
menu_selector(HelloWorld::menuCloseCallback)); //創建圖片菜單
CCMenuItemFont* fontMenu = CCMenuItemFont::create( "Play Game",
this,
menu_selector(HelloWorld::font)); //創建文字菜單
CCMenuItemToggle* toggleMenu = CCMenuItemToggle::createWithTarget( this, //創建開關菜單
menu_selector(HelloWorld::toggle),
CCMenuItemFont::create( "on"),
CCMenuItemFont::create( "off"),
NULL);
CCMenu* menu = CCMenu::create( imgMenu, fontMenu, toggleMenu, NULL); //創建菜單, 將菜單項加載進來
menu->setPosition( ccp( visibleSize.width / 2, visibleSize.height / 2));
addChild( menu);
我們看看效果:
咦, 好像不對啊, 怎麼說有的菜單都擠在一起了啊, 原來我們沒有對每個菜單項設置位置, 我們可以對每個菜單項設置位置哦,
其實, cocos2dX還爲我們提供了其他解決辦法, 例如縱向對其之類的, 看看這個
// menu->alignItemsHorizontally(); // 垂直對齊 menu->alignItemsVertically(); // 水平對象 // menu->alignItemsInColumns(2, 1, NULL); // 兩行,兩列,一列
我們來點擊每個菜單看看效果,
點擊圖片菜單, 按下的時候兩張圖片切換了, 並且在輸出打印了imgMenu,
點擊文字菜單, 文字放大, 並且輸出打印了fontMenu
點擊文字菜單, 文字改變, 並且輸出打印了toggleMenu
嗯, 今天也差不多啦, CCMenu很實用簡單的, 還是那句話, 希望大家多練習