当前位置:首页 > 开发 > 编程语言 > 编程 > 正文

cocos2dx 的通知中心

发表于: 2014-08-08   作者:墙头上一根草   来源:转载   浏览:
摘要:   Cocos2d-x CCNotificationCenter 通知中心 Cocos2d-x CCNotificationCenter 通知中心   相信接触过ios开发的人来说对NSNotificationCenter都不陌生。而在cocos2d-x中也参照这个类,提供了CCNotificationCenter这个类,用作通知中心。   那

 

Cocos2d-x CCNotificationCenter 通知中心

 

相信接触过ios开发的人来说对NSNotificationCenter都不陌生。而在cocos2d-x中也参照这个类,提供了CCNotificationCenter这个类,用作通知中心。

 

那么NotificationCenter的介绍请看这篇文章:点击打开链接

 

而我主要是使用NotificationCenter 进行不同类之间的参数传递。(譬如说在两个layer之间进行参数的传递)

 

 

 

下面对这个CCNotificationCenter类如何使用进行简单的介绍。

 

1、首先这个类的位置:cocos2dx/support

 

2、

 

注意这是一个单例类

 

使用时要获取到单例对象:

 

 

 

  1. /** Gets the single instance of CCNotificationCenter. */  
  2.     static CCNotificationCenter *sharedNotificationCenter(void);  

 

发送通知:

 

主要用到的两个方法:

 

 

 

  1. void postNotification(const char *name);  
  2.   
  3. void postNotification(const char *name, CCObject *object);  


例子:

 

 

  1. // Define this at the header  
  2. #define MY_NOTIFICATION "MY_NOTIFICATION"  

 

 

 

  1. CCNotificationCenter::sharedNotificationCenter()->postNotification(MY_NOTIFICATION, (CCObject*)1);  

 

接收通知(添加监听):

 

方法:

 

 

 

  1. void addObserver(CCObject *target,   
  2.                      SEL_CallFuncO selector,  
  3.                      const char *name,  
  4.                      CCObject *obj);  


例子:

 

 

  1. CCNotificationCenter::sharedNotificationCenter()->addObserver(this, callfuncO_selector(HelloWorld::myNotification), MY_NOTIFICATION, NULL);  

 

  1. // Handle the notification  
  2. void HelloWorld::myNotification(CCObject* obj)  
  3. {  
  4.     CCLOG("Notification achieved. ID: %i", (int)obj);  
  5. }  

 

注意:一般的在接受通知的一方在接受完通知后需要remove监听。

 

方法:

 

  1. void removeObserver(CCObject *target,const char *name);  
  2.   
  3. int removeAllObservers(CCObject *target);  

 

(注意第二个方法: returns the number of observers removed)

 

例子:

 

 

 

  1. HelloWorld::~HelloWorld()  
  2. {  
  3.     CCNotificationCenter::sharedNotificationCenter()->removeObserver(this, MY_NOTIFICATION);  
  4.       
  5. //    CCNotificationCenter::sharedNotificationCenter()->removeAllObservers(this);  
  6. }  


很简单吧!

参考文章: http://www.plungeinteractive.com/blog/2012/09/20/notification-center-extension-for-cocos2d-x/

 


 

补充 :

 

最近在使用 CCNotificationCenter 在两个 scene 之间传递参数的过程中遇到一个很容易出错的细节,下面简单记录一下。

 

我们知道,使用 CCNotificationCenter 在两个 scene 之间传递参数,接受方scene 要添加监听,也就是 addObserver ;而发送方scene是要发送消息,也就是 postNotification。

 

那么二者有先后的顺序吗?

 

注意:一定要先注册监听,然后发送消息,这样才可以实现数据的传递。--- 当然,这个也是很容易理解的吧。

 


 

而我就恰恰没有注意到这个问题,所以导致无法传递数据。

 

 

 

  1. <pre name="code" class="cpp">void HelloWorld::displayCallBack(cocos2d::CCNode *pNode)  
  2. {  
  3.     //发送消息  
  4.     CCNotificationCenter::sharedNotificationCenter()->postNotification(MNOTIFICATION, (CCObject*)1);  
  5.       
  6.     CCScene* scene = TargetRunScene::scene();  
  7.     CCDirector::sharedDirector()->pushScene(CCTransitionSlideInL::create(0.8f, scene));  
  8. }</pre>  

 

 

 

注意到:消息的接受方是 TargetRunScene ,那么我现实发送了消息,然后才初始化接受方的 scene,那么显然接收方的添加监听是在发送了消息后的,所以这样的话,是无法传递参数的。

 

那么,如何解决呢?

 

简单啦,就是讲发送消息的放在 TargetRunScene 初始化之后就可以了。

 

  1. void HelloWorld::displayCallBack(cocos2d::CCNode *pNode)  
  2. {  
  3.     CCScene* scene = TargetRunScene::scene();  
  4.     CCDirector::sharedDirector()->pushScene(CCTransitionSlideInL::create(0.8f, scene));  
  5.       
  6.     //发送消息  
  7.     CCNotificationCenter::sharedNotificationCenter()->postNotification(MNOTIFICATION, (CCObject*)1);  

cocos2dx 的通知中心

  • 0

    开心

    开心

  • 0

    板砖

    板砖

  • 0

    感动

    感动

  • 0

    有用

    有用

  • 0

    疑问

    疑问

  • 0

    难过

    难过

  • 0

    无聊

    无聊

  • 0

    震惊

    震惊

编辑推荐
目前 Window Phone 7 上还没有一个称之为:通知中心 的地方,iOS 5 也才刚刚开始提供这个功能。从 A
简化通知中心的使用 说明 1. 简化通知中心,笔者曾经实现过不需要移除的通知中心,基于弱引用集合(
改善系统的通知中心 iOS中的通知中心的实现实现机制是设计模式中的观察者. 在不进行任何修改的情况
重写通知中心类 笔者重新设计了通知中心类,功能完全与系统的通知中心一致,但有着比系统通知中心更优
通知中心NSNotificationCenter的使用 Cocoa框架中,通知中心以及KVO都属于设计模式中的观察者. Sourc
这是我在 千峰视频网上看到的 对于学习通知的例子还是挺有用的。 一、首先创建一个简单的命令行工程
通知中心是 Foundation 框架的一个子系统,它向应用程序中注册为某个事件观察者的所有对象广播消息
转载:http://www.cocoachina.com/ios/20141015/9917.html iOS 8拥有了全新的通知中心,有全新的通
前言 面向对象的设计思想是把行为方法封装到每一个对象中,以用来增加代码的复用性。正是这种分散封
  通知中心,它是IOS程序内部的一种消息广播机制,通过它,可以实现无引用关系的对象之间的通信。
版权所有 IT知识库 CopyRight © 2009-2015 IT知识库 IT610.com , All Rights Reserved. 京ICP备09083238号