Cocos2d-X中实现自定义菜单处理事件
发布时间:2020-12-14 19:05:41 所属栏目:百科 来源:网络整理
导读:当用户点击再松开后才会响应菜单事件,而在游戏中有些游戏需要玩家点击后就处理事件,如玩坦克大战的时候,玩家是点击一下就发射子弹,并是点击松手后发射子弹,在Cocos2d-X中没有这种消息,下面就通过自定义的方式实现当用户点击后就调用处理函数 程序:当
当用户点击再松开后才会响应菜单事件,而在游戏中有些游戏需要玩家点击后就处理事件,如玩坦克大战的时候,玩家是点击一下就发射子弹,并是点击松手后发射子弹,在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 在Menu.cpp中添加下面的代码 #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”直到松手
??
(编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |