Cocos2D-x游戏开发之二:菜单事件响应

来源:互联网 发布:APP登录HTML源码 编辑:程序博客网 时间:2024/04/30 01:24

接着描述Cocos2D-x基础知识。这一节我描述一下Cocos2D-x菜单的定义和响应。

先上代码吧,我们直接在helloworld的init函数中做更改调试:

bool HelloWorld::init()
{
    bool bRet = false;
    do 
    {
        //////////////////////////////////////////////////////////////////////////
        // super init first
        //////////////////////////////////////////////////////////////////////////


        CC_BREAK_IF(! CCLayer::init());


        //////////////////////////////////////////////////////////////////////////
        CCSize size = CCDirector::sharedDirector()->getWinSize();
        CCMenuItemImage *pCloseItem = CCMenuItemImage::create("CloseNormal.png","CloseSelected.png",this,menu_selector(HelloWorld::menuCloseCallback));
        CC_BREAK_IF(! pCloseItem);


        // Place the menu item bottom-right conner.
        pCloseItem->setPosition(ccp(CCDirector::sharedDirector()->getWinSize().width - 20, 20));
CCLabelTTF *label = CCLabelTTF::create("Show Sprite","Arial",30);
CCMenuItemLabel *plabel = CCMenuItemLabel::create(label,this,menu_selector(HelloWorld::LabelCallback));
        // Create a menu with the "close" menu item, it's an auto release object.
        CCMenu* pMenu = CCMenu::create(pCloseItem,plabel, NULL);
        pMenu->setPosition(size.width/2,size.height/2);
        CC_BREAK_IF(! pMenu);
pMenu->alignItemsVertically();


        // Add the menu to HelloWorld layer as a child layer.
        this->addChild(pMenu, 2);


        CCSprite* pSprite = CCSprite::create("HelloWorld.png");
        CC_BREAK_IF(! pSprite);
        pSprite->setPosition(ccp(size.width/2, size.height/2));
pSprite->setVisible(false);
        this->addChild(pSprite, 0,1);


        bRet = true;
    } while (0);


    return bRet;
}


void HelloWorld::menuCloseCallback(CCObject* pSender)
{
    // "close" menu item clicked
    CCDirector::sharedDirector()->end();
}


void HelloWorld::LabelCallback(CCObject* pSender)
{
CCSprite *spr=(CCSprite*)this->getChildByTag(1);
if (spr->isVisible())
{
spr->setVisible(false);
}
else
spr->setVisible(true);
}

下面对代码加以解释:

首先菜单子项:CCMenuItem 有很多种形式的实现我们这里用了最常用的MenuItemImag 和MenuItemLabel 其具体的描述请参见文档。

CmenuItem需要加入到容器CCMenu中来使用(其实这里的CCMenu好比CCsene我只这么理解的)然后将CCMenu加入到Layer中就能在场景中显示了。

注意设置菜单事件用menu_selector()来实现。

demo源码:http://download.csdn.net/detail/vanquishedzxl/7047123

0 2
原创粉丝点击