cocos2dx 自定义事件
来源:互联网 发布:网络市场营销师 编辑:程序博客网 时间:2024/06/05 15:58
cocos2dx里Director类里有一个_eventDispatcher成员变量,_eventDisptacher的类型是EventDispatcher。
对于EventDispatcher,只要是这个类的对象发送(通过dispatchEvent发送)的事件(EventCustrom对象),该对象的监听器(EventListenerCustom)就可以监听(通过addEventListenerWithFixedPriority或者addEventListenerWithSceneGraphPriority监听)到该事件。
这样,对于项目中,不管什么地方,只要监听该事件;然后不管什么地方,只要发送该事件,就可以直接调用得到。
比如:有三个按钮,按第一个时,需要按钮二和三高亮。
此时,可以按钮二和三监听一个事件,按钮一发送该事件即可。
当然,也可以按钮一拥有按钮二和按钮三的成员变量。
但是如果需求发生改变时,按钮二没有了,这时会影响到按钮一,按钮一的代码就要改动,不符合程序设计的单一职责原则。
这种事件监听和发送的机制就是程序设计模式中的一种。目的就是为了减少程序间的耦合性。
要知道,高内聚低耦合是程序设计的基本思想。
下面是实例代码:
_listener = EventListenerCustom::create("game_custom_event", [=](EventCustom* event){ std::string str("Custom event received, "); char* buf = static_cast<char*>(event->getUserData()); str += buf; str += " times"; statusLabel->setString(str.c_str());});Director::getInstance()->getEventDispatcher()->addEventListenerWithFixedPriority(_listener, 1);auto sendItem = MenuItemFont::create("Send Custom Event", [=](Ref* sender){ static int count = 0; ++count; char* buf = new char[10]; sprintf(buf, "%d", count); EventCustom event("game_custom_event"); Director::getInstance()->getEventDispatcher()->dispatchEvent(&event); event.setUserData(buf); _eventDispatcher->dispatchEvent(&event); CC_SAFE_DELETE_ARRAY(buf);});上面的代码是cocos2dx NewEventDispatcherTest中的代码。其中做了一些改动,把原代码中的_eventDispatcher改成了上面的Director::getInstance()->getEventDispatcher()。
cocos2dx里的Node类有一个_eventDispatcher成员变量,所以Node的子类也有。原代码中的_eventDispatcher就是这样一个变量,其实_eventDispatcher根本上就是Director::getInstance()->getEventDispatcher(),大家可以跟着原代码查看一下。
但是我个人觉得Node里的会让人产生歧义,会让人觉得只有Node里才有事件管理器,而没有全局的事件管理器。
- cocos2dx 自定义事件
- cocos2dx 的自定义事件
- cocos2dx 自定义事件
- quick cocos2dx 自定义事件管理器
- cocos2dx事件分发机制及自定义事件(事件类)
- cocos2dx 自定义触摸事件的分发
- 【cocos2dx 3.10】自定义事件的实现
- quick cocos2dx-Lua中的自定义事件的使用
- cocos2dx订阅者模式的自定义事件机制
- cocos2dx 触摸事件
- Cocos2dx------touch事件
- Cocos2dx------touch事件
- Cocos2dx------touch事件
- cocos2dx之触摸事件
- cocos2dx 触摸侦听事件
- cocos2dx之触摸事件
- cocos2dx 精灵点击事件
- cocos2dx 3.0 touch 事件
- 五大最受欢迎的BUG管理系统
- vue组件间 传值
- jsonp详解
- CentOS6.9完全离线升级安装gcc-5.4.0
- CSS样式(一)
- cocos2dx 自定义事件
- X-Forwarded-For 和 X-Real-IP 的区别?
- darwin之枚举值得组合使用(Task)
- Could not resolve all files for configuration ':classpath'.
- ubuntu16.04下Navicat for mysql 破解方法
- Android工具箱(一):3D ViewPager
- 【IOS 邮件】发信人为“xxxx”被服务器拒绝 的解决方法
- 2-9·Linux基本权限
- Android C++中 sp<> wp<>知识