当用户点击再松开后才会响应菜单事件,而在游戏中有些游戏需要玩家点击后就处理事件,如玩坦克大战的时候,玩家是点击一下就发射子弹,并是点击松手后发射子弹,在Cocos2d-X中没有这种消息,下面就通过自定义的方式实现当用户点击后就调用处理函数
程序:当用户点击后处理消息松开手后处理结束
首先自定义一个MyMenu类用于处理点击事件
- /*
- 1)注册定时器函数,在定时器处理函数中,调用m_pSelectItem->active()
- */
- class MyMenu : public CCMenu
- {
- public:
- CREATE_FUNC(MyMenu);
- //当手按下的时候
- bool ccTouchBegan(CCTouch* touch,CCEvent* ev)
- {
- bool bRet = CCMenu::ccTouchBegan(touch,ev);
- if (bRet)
- {
- // 注册定时器函数
- scheduleUpdate();
- return true;
- }
- return false;
- }
- void ccTouchEnded(CCTouch* touch,CCEvent* ev)
- {
- //定时器停止计时
- unscheduleAllSelectors();
- }
- //每次帧循环都会被调用
- //dt上一次帧循环到这次帧循环所花的时间
- void update(float dt)
- {
- if (this->m_pSelectedItem && m_eState == kCCMenuStateTrackingTouch)
- {
- this->m_pSelectedItem->activate();
- }
- }
- };
在Menu.h中添加下面的代码(代码中包含了自定义的MyMenu类)
- #ifndef __Menu_H__
- #define __Menu_H__
- #include "cocos2d.h"
- USING_NS_CC;
- class Menu : public CCLayer
- {
- public:
- virtual bool init();
- static CCScene* scene();
- //响应菜单事件
- void menuHandler(CCObject*);
- CREATE_FUNC(Menu);
- };
- /*
- 1)注册定时器函数,在定时器处理函数中,调用m_pSelectItem->active()
- */
- class MyMenu : public CCMenu
- {
- public:
- CREATE_FUNC(MyMenu);
- //当手按下的时候
- bool ccTouchBegan(CCTouch* touch,CCEvent* ev)
- {
- //定时器停止计时
- unscheduleAllSelectors();
- }
- //每次帧循环都会被调用
- //dt上一次帧循环到这次帧循环所花的时间
- void update(float dt)
- {
- if (this->m_pSelectedItem && m_eState == kCCMenuStateTrackingTouch)
- {
- this->m_pSelectedItem->activate();
- }
- }
- };
- #endif // Menu
- #include "Menu.h"
- CCScene* Menu::scene()
- {
- CCScene *scene = CCScene::create();
- Menu *layer = Menu::create();
- scene->addChild(layer);
- return scene;
- }
- bool Menu::init()
- {
- //初始化父类层
- CCLayer::init();
- //得到窗口的尺寸
- CCSize winSize = CCDirector::sharedDirector()->getWinSize();
- //创建菜单项
- CCMenuItem* item = CCMenuItemFont::create("Click Me",this,menu_selector(Menu::menuHandler));
- //使用自定义的MyMenu创建菜单
- MyMenu* menu = MyMenu::create();
- //添加菜单
- addChild(menu);
- //添加菜单项
- menu->addChild(item);
- return true;
- }
- //响应菜单事件
- void Menu::menuHandler(CCObject*)
- {
- CCLog("I am Clicked");
- }
执行结果:
当点中“Click Me”不松手,会一直打印“ Iam Clicked”直到松手