Cocos2d-X中实现自定义菜单处理事件
2014-10-15 11:39
615 查看
当用户点击再松开后才会响应菜单事件,而在游戏中有些游戏需要玩家点击后就处理事件,如玩坦克大战的时候,玩家是点击一下就发射子弹,并是点击松手后发射子弹,在Cocos2d-X中没有这种消息,下面就通过自定义的方式实现当用户点击后就调用处理函数
程序:当用户点击后处理消息松开手后处理结束
首先自定义一个MyMenu类用于处理点击事件
在Menu.h中添加下面的代码(代码中包含了自定义的MyMenu类)
在Menu.cpp中添加下面的代码
执行结果:
当点中“Click Me”不松手,会一直打印“ Iam Clicked”直到松手
程序:当用户点击后处理消息松开手后处理结束
首先自定义一个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) { 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(); } } };
#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”直到松手
相关文章推荐
- Qt 学习(8)Qt Creator中鼠标键盘事件的处理实现自定义鼠标指针(转)
- 来实现android自定义的menu菜单之二:为自定义menu中的线性布局添加事件
- Swoole 自定义项目初始化事件处理的实现
- 跨浏览器实现自定义事件处理
- 微信公众号-开发者-自定义菜单-CLICK事件处理
- asp.net2.0实现自定义Web处理类(迁移事件处理程序到SQL Server200中)
- 2014-10-27Android学习------布局处理(八)------自定义ListView的监听事件和Adapter的实现-----城市列表应用程序
- cocos2d-x自定义可点击/可处理事件/可接受触屏消息的Sprite
- 九、Qt Creator中鼠标键盘事件的处理实现自定义鼠标指针
- cocos2d-x 自定义Touch事件处理类
- Qt事件处理的五个层次、Qt自定义事件的实现
- js屏蔽鼠标右键默认事件以实现自定义菜单
- 自定义View想使用Scroller实现滑动效果,但是事件接收出现问题,只收到ACTION_DOWN,而无法收到ACTION_MOVE, ACTION_UP等消息的处理
- 使用Javascript封装实现屏蔽鼠标右键系统键菜单,并绑定自定义的事件
- Android自定义ViewGroup自动换行实现滑动任意布局及事件处理效果
- IOS学习——自定义View与使用block实现事件处理入门
- 跨浏览器实现自定义事件处理
- 九、Qt Creator中鼠标键盘事件的处理实现自定义鼠标指针
- 实现一个自定义事件处理对象notice,或者称为消息中心对象