Cocos2d-x游戏开发中的消息机制:CCNotificationCenter的使用
2013-09-30 22:57
633 查看
在HTML5游戏开发中,js可以使用Event对象的addEventListener(添加事件监听)、dispatchEvent(触发事件)实现监听机制,如果在coocos2d-x中,去实现这种机制该怎么办?
根据之前PureMVC(JS版)的经验,其中经典的观察者模式可以让我们引用到cocos2d-x中。我们可以尝试着把PureMVC(C++版)中的Notification(我称之为消息机制)引用进来,能让我们很轻易在Cocos2d-x开发的游戏中地实现监听。
其实Cocos2d-x在设计中,本身有用到观察者模式(Observer Model)。使用CCNotificationCenter可以满足我们的需求。
实现步骤:
1、发送消息:
在需要发送消息的地方,调用postNotification方法即可,postNotification有两种,可以不带数据和带数据。
name是消息名,是消息唯一标识,在整个游戏过程中是唯一的,因此,我们一般把所有的消息名放在一个头文件中,纺织消息名重复,data是消息体,即发送的数据。
发送通知如下:
2、接受消息:
在任何地方,只要你你对某个消息感兴趣(和pureMVC中的listNotification一样),你就可以在那里监听该消息。添加消息监听是在onEnter()里面的:
参数1为事件监听的目标,参数2为回调函数(即接收到消息后执行的函数),参数3为消息名,参数4为消息体。
具体实现如下:
3、释放消息观察者:
释放消息观察者是很重要的,不释放的话,会产生内存泄露。我们需要在onExit()方法里面,释放消息观察者。
根据之前PureMVC(JS版)的经验,其中经典的观察者模式可以让我们引用到cocos2d-x中。我们可以尝试着把PureMVC(C++版)中的Notification(我称之为消息机制)引用进来,能让我们很轻易在Cocos2d-x开发的游戏中地实现监听。
其实Cocos2d-x在设计中,本身有用到观察者模式(Observer Model)。使用CCNotificationCenter可以满足我们的需求。
实现步骤:
1、发送消息:
在需要发送消息的地方,调用postNotification方法即可,postNotification有两种,可以不带数据和带数据。
void postNotification(const char* name); void postNotification(const char* name,CCObject* data);
name是消息名,是消息唯一标识,在整个游戏过程中是唯一的,因此,我们一般把所有的消息名放在一个头文件中,纺织消息名重复,data是消息体,即发送的数据。
发送通知如下:
CCNotificationCenter::sharedNotificationCenter()->postNotification(name);
2、接受消息:
在任何地方,只要你你对某个消息感兴趣(和pureMVC中的listNotification一样),你就可以在那里监听该消息。添加消息监听是在onEnter()里面的:
void addObserver(CCObject* target,SEL_CallFuncO callBack,const char* name, CCObject* data);
参数1为事件监听的目标,参数2为回调函数(即接收到消息后执行的函数),参数3为消息名,参数4为消息体。
具体实现如下:
void GameLayer::onEnter(){ CCLayer::onEnter(); CCNotificationCenter::sharedNotificationCenter()->addObserver(this, callfunco_selector(GameLayer::callBack), name, NULL }
3、释放消息观察者:
释放消息观察者是很重要的,不释放的话,会产生内存泄露。我们需要在onExit()方法里面,释放消息观察者。
void GameLayer::onExit(){ CCLayer::onExit(); CCNotificationCenter::sharedNotificationCenter()->removeObserver( this, name //消息名 ) }
相关文章推荐
- Cocos2D-x游戏开发之二十三:CCNotificationCenter观察者模式(2)-不同层之间事件的发送和接受
- Cocos2d-x v3.x 的事件派发机制(消息处理机制CCNotificationCenter)
- Cocos2D-x游戏开发之二十二:CCNotificationCenter观察者模式基础(1)
- 【Cocos2dx游戏开发】CCNotificationCenter传递消息和数据
- 【Cocos2dx游戏开发】CCNotificationCenter传递消息和数据
- Cocos2D-x游戏开发之:CCNotificationCenter观察者模式基础
- COCOS2D-X之CCNotificationCenter的简单使用Demo
- Cocos2d-x游戏开发之CCLabelTTF标签详解之Create方法(设置自动换行的标签)和换行符的巧妙使用(十六)(高级篇)
- Cocos2d-x 中 CCNotificationCenter 的使用
- Cocos2d-x CCNotificationCenter 通知中心 自定义消息事件
- Cocos2d-x游戏开发之CCLabelTTF标签详解之Create方法(设置自动换行的标签)和换行符的巧妙使用(十六)(高级篇) (转)
- cocos2d-x游戏开发系列教程-超级玛丽08-消息机制
- cocos2d-x游戏开发系列教程-超级玛丽08-消息机制
- Cocos2d-x 游戏开发之巧用CCDelayTIme实现多个action有序执行,使用CCCallFunc添加action回调
- Cocos2d-x游戏开发——重复动作CCRepeatForever&CCJumpBy
- Unity3D开发和总结:用C#封装类似苹果NSNotificationCenter消息通信机制(KVO)
- 【麦可网】Cocos2d-X跨平台游戏开发学习笔记---第十八课:Cocos2D-X缓存机制1-4
- 【iOS-cocos2d-X 游戏开发之九】Cocos2dx利用CCSAXParser解析xml数据&CCMutableDictionary使用与注意!
- 初探使用iOS 7 Sprite Kit与Cocos2d开发游戏的对比
- 20、Cocos2dx 3.0游戏开发找小三之Cocos2d-x的动作机制:嘻,善哉!技盖至此乎?