Cocos2d自定义组件|继承CCMenu或CCMenuItem
2013-06-20 12:33
453 查看
http://blog.csdn.net/yanghuiliu/article/details/6908117
参照上文,作者没有提供完整代码,调试了我好久,先看下面转载部分,也可以直接看代码
转载
昨天在项目中为了写一个有特殊效果的menu,于是想想,不就是几个action吗,回调一下就ok了,的确这样实现了,关键在于这个项目中实在是灰常多的按钮,写了6、7个后,我吐血了,决定继承CCmenu,自己定义一个,这样就不用每个都写了。
原理很简单,新建一个类继承自CCMenu,重写它的touch事件,加入自己的效果。
[cpp]
view plaincopyprint?
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
[cpp]
view plaincopyprint?
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
参照上文,作者没有提供完整代码,调试了我好久,先看下面转载部分,也可以直接看代码
#ifndef __PurchaseMenu_H_ #define __PurchaseMenu_H_ #include "cocos2d.h" USING_NS_CC; #define USING_NS_PURCHASE_MENU using namespace puchase_menu namespace puchase_menu{ class PurchaseMenu : public CCMenu{ public: //PurchaseMenu() //{} //virtual ~PurchaseMenu(){} //dynamic methods PurchaseMenu * menuWithItems(CCMenuItem* item, ...); PurchaseMenu * menuWithItem(CCMenuItem* item); //static methods static PurchaseMenu* create(); static PurchaseMenu* create(CCMenuItem* item, ...); static PurchaseMenu* createWithItem(CCMenuItem* item); //void draw(); // implement the "static node()" method manually //CREATE_FUNC(PurchaseMenu); }; } #endif
#include "PurchaseMenu.h" USING_NS_CC; USING_NS_PURCHASE_MENU; PurchaseMenu* PurchaseMenu::menuWithItems(CCMenuItem* item, ...) { va_list args; va_start(args,item); PurchaseMenu *pRet = new PurchaseMenu();//这里记得要注意 if (pRet && pRet->initWithItems(item, args)) { pRet->autorelease(); va_end(args); return pRet; } va_end(args); CC_SAFE_DELETE(pRet) ; return NULL; } PurchaseMenu* PurchaseMenu::menuWithItem(CCMenuItem* item) { return menuWithItems(item, NULL); } PurchaseMenu* PurchaseMenu::create() { return PurchaseMenu::create(NULL, NULL); } PurchaseMenu * PurchaseMenu::create(CCMenuItem* item, ...) { va_list args; va_start(args,item); PurchaseMenu *pRet = new PurchaseMenu(); if (pRet && pRet->initWithItems(item, args)) { pRet->autorelease(); va_end(args); return pRet; } va_end(args); CC_SAFE_DELETE(pRet); return NULL; } PurchaseMenu* PurchaseMenu::createWithItem(CCMenuItem* item) { return PurchaseMenu::create(item, NULL); }
转载
昨天在项目中为了写一个有特殊效果的menu,于是想想,不就是几个action吗,回调一下就ok了,的确这样实现了,关键在于这个项目中实在是灰常多的按钮,写了6、7个后,我吐血了,决定继承CCmenu,自己定义一个,这样就不用每个都写了。
原理很简单,新建一个类继承自CCMenu,重写它的touch事件,加入自己的效果。
[cpp]
view plaincopyprint?
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;
}
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
[cpp]
view plaincopyprint?
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); }
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
相关文章推荐
- cocos2d-x学习笔记-CCMenu和CCMenuItem详解
- cocos2d-x学习笔记-CCMenu和CCMenuItem详解
- cocos2d-x 菜单CCMenu和CCMenuItemImage应用实例
- cocos2d-x学习笔记-CCMenu和CCMenuItem详解
- cocos2d-js 3.0 rc2 自定义UI控件组件 例子:能播放动画的MenuItem。MenuItemSprite的bug
- cocos2d-x、CCMenu、CCMenuItem
- 文本转载【Cocos2D-X 】初窥门径(16)几种常用的 CCMenuItem、自定义Button
- 【Cocos2D-X 游戏引擎】初窥门径(16)几种常用的 CCMenuItem、自定义Button
- cocos2d-x ——菜单层(CCMenuItemFont)二
- 八、CCMenu和CCMenuItem
- cocos2d-x TestLua 之 CCMenuItemImage 菜单类
- 1.cocos2dx之Menu(CCMenuItemFont,CCMenuItemImage,CCMenuItemLabel,CCMenuItemSprite,CCMenuItemToggle)
- cocos2d-x CCMenuItem自动排列
- cocos2d-x之-CCMenuItemToggle使用方法
- cocos2d-x 开关按钮 三态按钮 的实现 CCMenuItemToggle
- CCMenu超过CCScrollView边框还能点击处理,以及拖动CCMenuItem不响应点击事件
- 在 cocos2d 中判断互相重叠的 CCMenuItem
- cocos2d-X 节点(CCMenuItem.h)API
- Flex手机项目继承IconItemRenderer自定义List组件
- cocos2d-x CCmenuSpriteItem 用getChildByTag()获取;