cocos2dx 3.x 观察者模式_NotificationCenter的认识
2014-08-07 11:32
281 查看
1. 观察者模式
我们只需要对感兴趣的消息进行订阅,一旦有新的动态,就可以收到这些消息。2. NotificationCenter 常用函数
(1)addObserver函数 (订阅消息)
void addObserver(Ref * target,SEL_CallFuncO selector,const std::string & name,Ref * sender)根据指定的target,添加观察者.
Ref * target :要订阅消息的主体
SEL_CallFuncO selector :消息回调函数
std::string & name:消息名称
Ref * sender :要传递的数据
(2)removeObserver 函数 (取消订阅)
void removeObserver(Ref * target,const std::string & name)根据指定的target 和 name 移除观察者.
Ref * target:取消订阅消息的主体
const std::string & name:消息名称
(3)postNotification函数(发布消息)
void postNotification(const std::string & name)根据某个名字发送一个通知事件.
const std::string & name: 消息名称
void postNotification(const std::string & name,Ref * sender) 根据某个名字发送一个通知事件.
const std::string & name: 消息名称
Ref * sender: 要传输的数据
3. 具体的代码实现
发布消息的类bool NotificationCenterTest::init(){ if(!Layer::init()){ return false; } //创建一个菜单,用于发布test消息 auto lableItem = MenuItemLabel::create(Label::createWithTTF("send msg","fonts/Marker Felt.ttf",26),CC_CALLBACK_1(NotificationCenterTest::sendMsg,this)); auto menu = Menu::create(lableItem,NULL); this->addChild(menu); return true; } void NotificationCenterTest::sendMsg(Ref* pSender){ //发布test消息 auto sData = String::create("NotificationCenterTest msg"); sData->retain(); NotificationCenter::getInstance()->postNotification("test",sData); }订阅消息,接收消息的类
bool NotificationCenterOther::init(){ if(!Layer::init()){ return false; } //订阅消息类型为test的消息,不传递数据 NotificationCenter::getInstance()->addObserver(this,callfuncO_selector(NotificationCenterOther::testMsg),"test",NULL); return true; } void NotificationCenterOther::testMsg(Ref* pSender){ auto msg = (String*)pSender; log("testMsg: %s",msg->getCString()); }
如果addObserver和postNotification函数都传递了数据,并且不是同一个数据,那将无法发布消息。
相关文章推荐
- 【potatoes游戏开发】cocos2dx3.X项目重写(八)观察者模式(中)
- cocos2dx3.x 观察者模式
- cocos2dx3.X项目重写(七)观察者模式以及schedule引起的bug
- cocos2dx3.X项目重写(七)观察者模式以及schedule引起的bug
- 【potatoes游戏开发】cocos2dx3.X项目重写(八)观察者模式(中)
- 利用观察者模式实现Cocos2DX-lua游戏中的消息管理系统
- 认识-----观察者设计模式
- cocos2dx 3.x 屏幕触摸事件的认识
- cocos2dx 3.x sprite 和spriteBatchNode的认识
- 『设计模式』认识观察者模式
- cocos2dx 3.x 导演、场景、层、精灵的认识
- 关于cocos2dx观察者模式(CCNotificationCenter)
- 认识 Cocos2dx 3.x
- Cocos2dx 提供的观察者模式工具类 CCNotificationCenter
- 认识观察者模式(设计模式)[转载]
- cocos2dx3.3 CCNotificationCenter观察者模式
- 认识观察者模式
- cocos2dx 3.x 动作的认识
- cocos2dx 观察者模式
- cocos2dx 观察者模式详解