cocos2d-x中继承CCMenu定义自己的menu

来源:互联网 发布:王心凌honey 知乎 编辑:程序博客网 时间:2024/06/05 02:13

        昨天在项目中为了写一个有特殊效果的menu,于是想想,不就是几个action吗,回调一下就ok了,的确这样实现了,关键在于这个项目中实在是灰常多的按钮,写了6、7个后,我吐血了,决定继承CCmenu,自己定义一个,这样就不用每个都写了。  

       原理很简单,新建一个类继承自CCMenu,重写它的touch事件,加入自己的效果。

bool MyMenu::ccTouchBegan(CCTouch* touch, CCEvent* event){    CC_UNUSED_PARAM(event);    if (m_eState != kCCMenuStateWaiting || ! m_bIsVisible)    {        return false;    }        for (CCNode *c = this->m_pParent; c != NULL; c = c->getParent())    {        if (c->getIsVisible() == false)        {            return false;        }    }        m_pSelectedItem = this->itemForTouch(touch);    if (m_pSelectedItem)    {        m_eState = kCCMenuStateTrackingTouch;        m_pSelectedItem->selected();        //这里加入自己想要的效果。。。。。。。。。。。。。。。。        return true;    }    return false;}
还没有结束,我想要的是让menu里面的item有特效,那么我还应该重写它的menuWithItems方法。

一定要记得改变他的初始化方法,原来的初始化方法返回的是系统的CCMenu,要自己改为返回自己定义的Menu

MyMenu * MyMenu::menuWithItems(CCMenuItem* item, ...){    va_list args;    va_start(args,item);    MyMenu *pRet = new MyMenu();//这里记得要注意    if (pRet && pRet->initWithItems(item, args))    {        pRet->autorelease();        va_end(args);        return pRet;    }    va_end(args);    CC_SAFE_DELETE(pRet)    return NULL;}MyMenu* MyMenu::menuWithItem(CCMenuItem* item){    return menuWithItems(item, NULL);}

这样你可以自己随意改变里面的m_pSelectedItem,要什么效果,自己写咯。

原创文章,欢迎转载。转载请注明地址:http://blog.csdn.net/yanghuiliu/article/details/6908117





原创粉丝点击