Cocos2d-x游戏开发中的消息机制:CCNotificationCenter的使用

在HTML5游戏开发中,js可以使用Event对象的addEventListener(添加事件监听)、dispatchEvent(触发事件)实现监听机制,如果在coocos2d-x中,去实现这种机制该怎么办?

 
根据之前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 //消息名 ) }

 

转载于:https://www.cnblogs.com/iRavior/p/3348130.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值