日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

1.cocos2dx之Menu(CCMenuItemFont,CCMenuItemImage,CCMenuItemLabel,CCMenuItemSprite,CCMenuItemToggle)

發布時間:2024/9/27 编程问答 20 豆豆
生活随笔 收集整理的這篇文章主要介紹了 1.cocos2dx之Menu(CCMenuItemFont,CCMenuItemImage,CCMenuItemLabel,CCMenuItemSprite,CCMenuItemToggle) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.


CCMenu

  • 基本結構

    CCMenu繼承自CCLayer,本質是一個容器。需要被addChild到父類中去。

    CCMenuItem是菜單項,它有如下子類:

  • CCMenuItemFont;CCMenuItemImage;CCMenuItemLabel;CCMenuItemSprite;CCMenuItemToggle;

    是真正的需要實例化的菜單項。需要addChildCCMenu對象中去。

    示例:

    CCMenuItem * item = CCMenuItemFont::create(“Start”);

    //這里的this表示的是調用者

    Item->setTarget(this,menu_selector(MYMenu::menuCallBack));

    CCMenu * menu = CCMenu::create();

    menu->addChild(item);

    addChild(menu);

  • CCMenuItem

  • A? CCMenuItemFont

    CCMenuItem * font = CCMenuItemFont::create(“Start”,this,menu_selector(MYMenu::menuCallBack));

    CCMenu * menu = CCMenu::create();

    menu->addChild(item);

    addChild(menu);

    第一個參數為標簽要顯示的文字,第二個參數表示回調函數的調用者,第三個參數表示回調函數。

    關于回調

    typedef void (CCObject::*SEL_MenuHandler)(CCObject *);

    #define menu_selector(_SELECTOR)(SEL_MenuHandler)(&_SELECTOR)

    ?

    B? CCMenu的坐標系統研究

    fontItem->setPosition(ccp(winSize.width – 50,30));

    menu->setPosition(CCPointZero);

    CCLog("fontItem = %g %g", fontItem->getPositionX(),fontItem->getPositionY());

    CCLog("menu = %g, %g,width %g,height = %g",menu->getPositionX(),menu->getPositionY(),

    menu->getContentSize().width,menu->getContentSize().height);

    ?

    C?CCMenuItemImage

    CCMenuItem *imageItem = CCMenuItemImage::create(“CloseNormal.png”,”CloseSelected.png”);

    imageItem->setTarget(this,menu_selector(Menu::menuCallBack));

    1個參數為末點擊是顯示的圖片,第二個參數為點擊后顯示的圖片,最后參數可以放到setTarget中,意義同上。

    D? CCMenuItemLabel

    CCLabelBMFont *bm = CCLabelBMFont::create("bmFontLabelMenu",

    "fonts/bitmapFontTest.fnt");

    CCMenuItem * labelItem = CCMenuItemLabel::create(bm, this,menu_selector(MYMenu::menuCallBack));

    menu->addChild(labelItem);

    ??? 第一個參數為一個label,最后兩個參數同上。

    E? CCMenuItemSprite

    CCSprite * normal = CCSprite::create(“gonormal.png”);

    CCSprite * selected = CCSprite::create(“goselected.png”);

    CCMenuItemSprite * spriteItem = CCMenuItemSprite::create(normal,selected,this,menu_selector(MYMenu::menuCallBack));

    menu->addChild(spriteItem);

    第一個參數和第二個參數為CCSprite后面的參數,同上。

  • CCMenuItemToggle

  • CCMenuItem *t1 = CCMenuItemFont::create("ON");

    CCMenuItem *t2 = CCMenuItemFont::create("OFF");

    CCMenuItem *t3 = CCMenuItemFont::create("10%");

    CCMenuItem *t4 = CCMenuItemFont::create("50%");

    CCMenuItemToggle * toggle =

    CCMenuItemToggle::createWithTarget(this,

    menu_selector(T11Menu::menuCallBack), t1, t2, t3, t4, NULL);

    menu->addChild(toggle);

    ?? 第一個和第二個參數為回調函數調用者和回調函數,后面的參數為CCMenuItem.可以實現變化的菜單。

  • 如何判斷哪個菜單被點

  • Tag

    CCArray * array = menu->getChildren();

    CCObject * obj;

    int i = 0;

    CCARRAY_FOREACH(array, obj)

    {

    CCMenuItem * item = (CCMenuItem *)obj;

    item->setTag(i + 1000);

    i++;

    }

    Tag

    CCMenuItem * item = (CCMenuItem *)obj;

    Switch (item->getTag() - 1000) {

    Case FONT1:

    ??? CCLog(“CCMenuItemFont”);

    ??? break;

    case FONT2:

    ??? break;

    case IMAGE:

    ??? break;

    case BM:

    ??? break;

    case SPRITE:

    ??? break;

    case TOGGLE:

    {

    ??? int index = ((CCMenuItemToggle *)item)->getSelectedIndex();

    ??? CCLog(“index = %d”,index);

    }

    break;

    }

  • 案例說明:

  • MYMenu.h

    #ifndef __MYMENU_H__

    #define __MYMENU_H__

    #include "cocos2d.h"

    USING_NS_CC;

    ?

    class MYMenu : public CCLayer {

    public:

    ??? CREATE_FUNC(MYMenu);

    ??? bool init();

    ??? static CCScene * scene();

    ??? void menuCallBack(CCObject * obj);

    ?

    ??? enum MENU

    ??? {

    ??????? FONT1, FONT2, IMAGE, LABELLABEL, SPRITE, TOGGLE

    ??? };

    ?

    ??? CCMenu * menu;

    };

    ?

    #endif

    ?

    MYMenu.cpp

    #include "MYMenu.h"

    #include "AppMacros.h"

    ?

    CCScene * MYMenu::scene()

    {

    ??? CCScene * scene = CCScene::create();

    ??? MYMenu * layer = MYMenu::create();

    ??? scene->addChild(layer);

    ??? return scene;

    }

    ?

    //五種菜單

    #if 0

    CCMenuItemFont;

    CCMenuItemImage;

    CCMenuItemLabel;

    CCMenuItemSprite;

    CCMenuItemToggle;

    #endif

    ?

    bool MYMenu::init()

    {

    ??? CCLayer::init();

    ?

    ??? //1步:創建一個菜單

    ??? menu = CCMenu::create();

    ?

    ??? //2步:創建菜單項

    ??? //可以將下面的兩行合并

    ??? CCMenuItem * fontItem = CCMenuItemFont::create("fontmenu");

    ??? fontItem->setTarget(this, menu_selector(MYMenu::menuCallBack));

    ?

    ??? //顯示menuItem在界面中的顯示條項

    ??? CCLog("first Item :x = %g y = %g", fontItem->getPositionX(), fontItem->getPositionY());

    ??? CCLog("first Item Anchor x = %g,y = %g", fontItem->getAnchorPoint().x, fontItem->getAnchorPoint().y);

    ??? CCLog("first Item ContentSize width %g hight %g",

    ??????? fontItem->getContentSize().width,fontItem->getContentSize().height);

    ?

    ??? //創建第二個Menu條項

    ??? CCMenuItem * fontItem2 = CCMenuItemFont::create("fontmenu2");

    ??? fontItem2->setTarget(this, menu_selector(MYMenu::menuCallBack));

    ?

    ??? //設置Menu在界面中的顯示狀態

    ??? //menu->alignItemsVerticallyWithPadding(40);

    ?

    ??? //顯示menu在界面中的顯示特征

    ??? CCLog("---------------------------------------------");

    ??? CCLog("Menu:x = %g,y = %g", menu->getPositionX(), menu->getPositionY());

    ??? CCLog("Menu Anchor x = %g y = %g", menu->getAnchorPoint().x, menu->getAnchorPoint().y);

    ??? CCLog("Menu ContentSize width %g high %g",

    ??????? menu->getContentSize().width,

    ??????? menu->getContentSize().height);

    ?

    ??? //2步:創建CCMenuItemImage類型的菜單項

    ??? CCMenuItem *imageItem = CCMenuItemImage::create("CloseNormal.png","CloseSelected.png");

    ??? imageItem->setTarget(this, menu_selector(MYMenu::menuCallBack));

    ?

    ??? //2步:創建CCLabelBMFont類型的菜單項

    ??? CCLabelBMFont * bm = CCLabelBMFont::create("bmMenu", "fonts/bitmapFontTest.fnt");

    ??? CCMenuItem *labelItem = CCMenuItemLabel::create(bm);

    ??? labelItem->setTarget(this,menu_selector(MYMenu::menuCallBack));

    ?

    ??? //2步:創建CCSprite類型的菜單項

    ??? CCSprite *nor = CCSprite::create("btn_go_1.png");

    ??? CCSprite *sel = CCSprite::create("btn_go_0.png");

    ??? CCMenuItem * sprItem = CCMenuItemSprite::create(nor,sel);

    ??? sprItem->setTarget(this, menu_selector(MYMenu::menuCallBack));

    ?

    ??? //2步:創建CCMenuItemToggle類型的菜單項

    ??? CCMenuItem * t1 = CCMenuItemFont::create("ON");

    ??? CCMenuItem * t2 = CCMenuItemFont::create("OFF");

    ??? CCMenuItem * t3 = CCMenuItemFont::create("10%");

    ??? CCMenuItem * t4 = CCMenuItemFont::create("%50%");

    ??? CCMenuItem * toggle = CCMenuItemToggle::createWithTarget(this,

    ??????? ???????????????????????????????????????????????????? menu_selector(MYMenu::menuCallBack),

    ??????????????????????????????????????????????????????????? ?t1,t2,t3,t4,NULL);

    ?

    ??? //3步:將菜單項添加到菜單中去

    ??? menu->addChild(fontItem);

    ??? menu->addChild(fontItem2);

    ??? menu->addChild(imageItem);

    ??? menu->addChild(labelItem);

    ??? menu->addChild(sprItem);

    ??? menu->addChild(toggle);

    ??? this->addChild(menu);

    ???

    ??? //4步:設置菜單項的顯示方式,讓菜單項垂直顯示

    ??? menu->alignItemsVertically();

    ?

    ??? //CCMenu類有一個getChildren()方法可以得到菜單項

    ??? CCArray * array = menu->getChildren();

    ??? CCObject * obj;

    ??? int i = 0;

    ??? CCARRAY_FOREACH(array, obj)

    ??? {

    ??????? CCMenuItem *item = (CCMenuItem *)obj;

    ??????? item->setTag(i + 100);

    ??????? i++;

    ??? }

    ?

    ??? /*

    ??? for (int i = 0; i < array->count();++i)

    ??? {

    ??????? CCMenuItem *item = (CCMenuItem *)array->objectAtIndex(i);

    ??????? item->setTag(i);

    ??? }

    ??? */

    ?

    ??? return true;

    }

    ?

    //回調函數

    void MYMenu::menuCallBack(CCObject * obj)

    {

    ??? CCMenuItem * item = (CCMenuItem *)obj;

    ??? switch (item->getTag() - 1000)

    ??? {

    ??? case FONT1:

    ??????? CCLog("font menu call ");

    ??????? break;

    ??? case FONT2:

    ??????? break;

    ??? case IMAGE:

    ??????? break;

    ??? case LABELLABEL:

    ??????? break;

    ??? case TOGGLE:

    ??????? int idx = ((CCMenuItemToggle *)item)->getSelectedIndex();

    ??????? CCLog("index = %d", idx);

    ??????? break;

    ??? }

    }

    運行結果:

    ?

    總結

    以上是生活随笔為你收集整理的1.cocos2dx之Menu(CCMenuItemFont,CCMenuItemImage,CCMenuItemLabel,CCMenuItemSprite,CCMenuItemToggle)的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。