深秋

  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

准备工作        

        首先创建一个Cocos2DX-win32应用程序,项目名称未MenuDemo并取消Box2D和声音的支持,如下图:

          imageimage

点击“Finish”有运行一下项目,如下图没有问题

(windows下配置见 http://www.cnblogs.com/BlueBeauty/p/3687542.htmlhttp://www.cnblogs.com/BlueBeauty/p/3690409.html

                image

图片菜单使用

        为了便于观察,我将背景和“HelloWorld”注释掉。其实在新创建的项目中已经有了一个菜单就是右下角关闭菜单。我们再添加一个Play菜单。首先看看CCMenuItemImage创建菜单函数的原型  static CCMenuItemImage* create(const char *normalImage, const char *selectedImage,  CCObject* target, SEL_MenuHandler selector)。前两个参数是普通状态和选择状态的图片名称,最后一个参数是一个函数指针,也就是点这个菜单要做的事情。首先选择两张图片拷贝到项目目录的Resources下,然后在HelloWorldScene.cpp文件的init方法中添加如下代码
      

CCMenuItemImage *pPlay = CCMenuItemImage::create(
            "btn-play-normal.png",
            "btn-play-selected.png",
            this,
            menu_selector(HelloWorld::menuCloseCallback)
       );
pPlay->setPosition(ccp(0,0));
CCMenu* pMenu = CCMenu::create(pCloseItem,pPlay, NULL);  // CCMenu* pMenu = CCMenu::create(pCloseItem, NULL)

       保存运行项目,如图:

             imageimageimage

        我们看到图片菜单出现在了窗口的左下方但又没显示完整。为了把图片显示完整,再来修改一个菜单的位置pPlay->setPosition(ccp(125/2,42/2)) (图片大小为125,42)如上图。由此我们可以确定引擎将显示区域的左下角顶为原点;setPosition函数设置的是元素的中心点在现实区域的位置。那如何才能将菜单放在正中间呢,这样做还要用到一个来自CCDirector类getWinSize的函数。这个函数的名称期初让我一些迷惑,以为获取的大小包含了窗体的标题栏和边框,其实不然该函数返回的大小就是现实区域的大小。小伙们下断跟踪一下就知道了。

        好了,这个菜单就还差自己的回调函数,其实不难就不写了记得在头文件中实现声明哦。

文本菜单使用

        下面再学一下文本菜单的使用,文本标签菜单的使用需要提供一个文本标签,还是看看函数声明

               static CCMenuItemLabel * create(CCNode*label, CCObject* target, SEL_MenuHandler selector);

        首先添加一个回调函数,如下:

HelloWorldScene.h
class HelloWorld : public cocos2d::CCLayer
{
public:
    virtual bool init();  

   static cocos2d::CCScene* scene();
    
    // a selector callback
    void menuCloseCallback(CCObject* pSender);
    void menuPlayCallback(CCObject* pSender);
    void menuPlayLabelCallback(CCObject* pSender);
    // implement the "static node()" method manually
    CREATE_FUNC(HelloWorld);
};

HelloWorldScene.cpp
void HelloWorld::menuPlayLabelCallback(CCObject* pSender)
{
    CCLOG("menuPlayLabelCallback");    
}

    修改init方法

CCMenuItemImage *pPlay = CCMenuItemImage::create(
            "btn-play-normal.png",
            "btn-play-selected.png",
            this,
            menu_selector(HelloWorld::menuPlayCallback)
            );
        pPlay->setPosition(ccp(size.width/2,size.height/2));

        //新加的
        CCLabelTTF* pLabel = CCLabelTTF::create("Label Menu Demo","Arial",30);
        CCMenuItemLabel* pMenuLabel = CCMenuItemLabel::create(
            pLabel,this,menu_selector(HelloWorld::menuPlayLabelCallback));
        pMenuLabel->setPosition(
            ccp(size.width/2,size.height/2-42)
            );
        CCMenu* pMenu = CCMenu::create(pCloseItem,pPlay,pMenuLabel, NULL);

F5看看效果吧

                                                                image

posted on 2014-04-26 16:50  深秋  阅读(305)  评论(0编辑  收藏  举报