【2014-02-19】cocos2dx学习笔记:消息注册机制
[历史归档]本文原发布于 cstriker1407.info 个人博客内容为历史存档仅供参考。发布时间2014-02-19 标题cocos2dx学习笔记消息注册机制分类编程 / C C / cocos2dx 标签cocos2dxcocos2dx学习笔记消息注册机制在需要发送消息的地方比如点击下一关按钮的回调函数post消息即可post有两种类型带数据和不带数据在任何地方只要你对某个消息感兴趣你就可以在那里监听该消息。假如你对kXxxxName消息感兴趣要做的本文转自【 http://www.cnblogs.com/imoon/archive/2013/01/15/2860877.html 】有删改。游戏中经常遇到几个层之间互相通信的问题。比如当前页是游戏页游戏结束的时候直接显示结算页不进行转场了结算页上又有按钮。这时如果要响应按钮点击事件处理一些数据之类的需要包含别的头文件。这样不太好。像上边这种类似的问题就可以使用观察者模式。在需要发送消息的地方比如点击下一关按钮的回调函数post消息即可post有两种类型带数据和不带数据voidpostNotification(constchar*name);voidpostNotification(constchar*name,CCObject*object);name:消息的名称可以当成是消息的唯一标识一般这样定义nameconstchar*constkXxxxNamexxxx;发送消息通知的例子如下CCNotificationCenter::sharedNotificationCenter()-postNotification(kXxxxName);原作者此处认为CCNotificationCenter在extension命名空间中在cstriker1407的cocos2dx版本中Center在cocos2dx命名空间中在任何地方只要你对某个消息感兴趣你就可以在那里监听该消息。假如你对kXxxxName消息感兴趣要做的首先重写onEnter()在onEnter()里面监听消息监听消息的原型如下voidaddObserver(CCObject*target,SEL_CallFuncO selector,constchar*name,CCObject*obj);具体实现代码如下voidA::onEnter(){CCLayer::onEnter();CCNotificationCenter::sharedNotificationCenter()-addObserver(this,callfuncO_selector(A::func),// 处理的消息的回调函数kXxxxName,// 感兴趣的消息名称NULL);// 保存消息中传递的数据}这样的话如果有消息来得话就会调用回调函数来处理了。其次也很重要要重写onExit()方法释放掉消息观察者如果不释放会发生内存泄露的函数原型如下voidremoveObserver(CCObject*target,constchar*name);// name就是消息的名称即要释放掉的那个消息具体实现代码如下voidA::onExit(){CCNotificationCenter::sharedNotificationCenter()-removeObserver(this,kXxxxName);// 消息名称CCLayer::onExit();}回调函数声明如下voidA::func(cocos2d::CCObject*obj){}