cocos2dx CCNotificationCenter的简单实用
来源:互联网 发布:淘宝客服什么时候上班 编辑:程序博客网 时间:2024/05/21 10:56
做过iOS开发的同学,应该很熟悉通知中心(NSNotificationCenter)这个东西,Cocos2d-x引擎中也集成了这个功能,即CCNotificationCenter下面就简单介绍一下。
一般情况下,通知中心主要用在跨页面或者类传递参数,有的时候,一个类做了某个操作后,想让另一个类进行相应的操作,也可以通过通知来实现。
打个比方,有一个mainLayer用来渲染主页面,在这个页面中,点击某个按钮的时候,弹出了一个subLayer,在subLayer中,当点击了某个按钮后,调用networkManager发送网络请求,然后,subLayer就关闭了,这时,如果想让网络请求完成后,将mainLayer中的某个控件隐藏,使用通知中心就方便多了,直接在mainLayer中注册通知,在networkManager网络请求完成的方法中直接发送通知就好了。在这种情况下,如果不适用通知,实现这种功能会变得很复杂,而且,耦合性太强了,如果不使用通知,要先将mainLayer的指针传给subLayer,然后再通过subLayer将mainLayer的指针传给networkManager,然后,在网络请求完成后,通过该指针,调用mainLayer中相应的方法,实现要求的功能。
在这里主要使用了CCNotificationCenter.h中的两个方法
void __NotificationCenter::postNotification(const std::string& name)
void __NotificationCenter::addObserver(Ref *target, SEL_CallFuncO selector,const std::string& name,Ref *sender)
首先,定义一个宏,来代表该通知的名称,从postNotification和addObserve方法中可以了解到名字只能为string类型:
#define REQUEST_FINISH_NOTIFICATION "requestFinishNotification"
CCNotificationCenter::sharedNotificationCenter()->addObserver(this,callfuncO_selector(MainLayer::notificationHandler),REQUEST_FINISH_NOTIFICATION,NULL);
void MainLayer::notificationHandler(Ref* obj){}
在这里写上所需的操作;其次,还要在networkManager中发送通知,当网络请求完成后,发送通知如下:
CCNotificationCenter::sharedNotificationCenter()->postNotification(REQUEST_FINISH_NOTIFICATION);这样,就完成了通知的注册和发送,这里强调一下,由于是宏定义,所以,需要引入宏定义所在的头文件。
此外,当完成了注册之后,还要在析构函数中移除通知的监听,谁监听,谁就移除,可以使用如下方法:
MainLayer::~MainLayer() { CCNotificationCenter::sharedNotificationCenter()->removeObserver(this, REQUEST_FINISH_NOTIFICATION); //也可以移除全部的监听// CCNotificationCenter::sharedNotificationCenter()->removeAllObservers(this); }这样,就完成了一个简单的cocos2dx的通知功能。
0 0
- cocos2dx CCNotificationCenter的简单实用
- Cocos2dx 学习笔记26 CCNotificationCenter的使用
- Cocos2dx 提供的观察者模式工具类 CCNotificationCenter
- cocos2dx 事件响应机制 CCNotificationCenter
- COCOS2D-X之CCNotificationCenter的简单使用Demo
- CCNotificationCenter的用法
- CCNotificationCenter的使用
- 关于cocos2dx观察者模式(CCNotificationCenter)
- CCNotificationCenter
- CCNotificationCenter
- 基于cocos2dx的RPG简单实用算法之1 - 角色的移动
- 基于cocos2dx的RPG简单实用算法之2 - 角色跟随移动
- 基于cocos2dx的RPG简单实用算法之3 - 多角色跟随阵型移动
- 【Cocos2dx游戏开发】CCNotificationCenter传递消息和数据
- 简单实用的bugfree
- 简单实用的 .vimrc
- selenium的简单实用
- 简单实用的makefile
- 安卓入门之安卓系统架构
- cell的分割线问题
- Error:Execution failed for task ':app:mergeDebugResources'.
- HDD is Outdated Technology(求总间隔)
- spark通过合理设置spark.default.parallelism参数提高执行效率
- cocos2dx CCNotificationCenter的简单实用
- Leetcode: N Queen I & II
- JAVA设计模式--策略模式
- java之集合框架
- 半透明界面
- JAVA实践数组版图存储结构--邻接表
- 千万不要用cell.tag
- nyoj 655 光棍的YY (斐波那契数列)
- 如何将 eclipse 配置成 IDEA