您的位置:首页 > 移动开发 > Cocos引擎

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有两种,可以不带数据和带数据。

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  //消息名
)
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐