CCNotificationCenter事件监听器

转自  点击打开链接


CCNotificationCenter事件监听器也好,观察者模式也罢,这个东西的用处就是用在俩个类通信的时候,一个类用来发送消息,一个类用来接收消息。其实这个东西的用处是非常大的,举个例子吧。比如一片草地,会在不同的季节反应出不同的状态,春天的时候草长了出来,都是绿的,夏天的时候草长的更高了,秋天的时候又会变颜色,在四季更换的不同状态下,草的颜色也会跟着发生改变,也就是会对应不同的状态,这个天气信息就可以看成发送过来的消息,而对这些消息的处理就是状态之间的相互切换。我也不知道说的正确不正确,但是推荐给大家一篇博客,不理解的可以看看。事件驱动,你想象不到的强大。下面我来说说怎么用这个东西,以及用的时候要注意的一些问题。

1 //将消息名定义在一个头文件中
2 #ifndef _NOTIFICATION_H_
3 #define _NOTIFICATION_H_
4  
5 #define MY_NOTIFICATION "Hello"
6  
7 #endif

CCNotification采用了单例的 设计模式 ,使用函数addObserver来监听消息。这段代码我写在了init中。


1 //第一个参数是监听消息的对象,第二个参数是消息发来的时候调用的函数,第三个参数消息的名字
2     //第四个参数消息体
3     CCNotificationCenter::sharedNotificationCenter()->addObserver(this,
4         callfuncO_selector(TestScene::getNotification),MY_NOTIFICATION,NULL);
1 //第一个参数是监听消息的对象,第二个参数是消息发来的时候调用的函数,第三个参数消息的名字
2     //第四个参数消息体
3     CCNotificationCenter::sharedNotificationCenter()->addObserver(this,
4         callfuncO_selector(TestScene::getNotification),MY_NOTIFICATION,NULL);

1 //监听消息的函数
2 void TestScene::getNotification(CCObject * object)
3 {
4     int * i = (int *)object;
5     CCLog("HelloWorld i = %d",i);
6 }

接下来就是使用post来发送消息了。
1 void HelloWorld::menuCloseCallback(CCObject* pSender)
2 {
3     //注意1、在发送消息之前一定要先初始化TestScene,这个时候在TestScene的init方法中已经注册了消息,也就是
4     //调用了addObserver函数,否则的话是接受不到消息的
5     CCDirector::sharedDirector()->replaceScene(TestScene::scene());
6  
7     //第一个参数是消息的名字,第二个参数是CCObject * 类型的消息值,也就是你要发送的东西
8     CCNotificationCenter::sharedNotificationCenter()->postNotification(MY_NOTIFICATION,(CCObject *)1);
9 }

释放消息一般写在onExit()函数中,就是谁监听消息,谁释放消息。

1 void TestScene::onExit()
2 {
3     //注意最后一定要释放消息,否则内容泄露
4     CCNotificationCenter::sharedNotificationCenter()->removeObserver(this,MY_NOTIFICATION);
5     //返回值是int类型,表示释放的监听消息的个数
6     //int ret = CCNotificationCenter::sharedNotificationCenter()->removeAllObservers(this);
7     //CCLog("%d",ret);
8 }

CCNotificationCenter事件监听器







1 //第一个参数是监听消息的对象,第二个参数是消息发来的时候调用的函数,第三个参数消息的名字
2     //第四个参数消息体
3     CCNotificationCenter::sharedNotificationCenter()->addObserver(this,
4         callfuncO_selector(TestScene::getNotification),MY_NOTIFICATION,NULL);
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值