`
墙头上一根草
  • 浏览: 154547 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

cocos2dx 的通知中心

阅读更多

 

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);  

分享到:
评论

相关推荐

    cocos2d播放视频方法相关

    本文将详细介绍如何在Cocos2d中实现视频播放,以及相关的步骤和技术要点。 首先,我们需要了解Cocos2d的基础知识。Cocos2d是一个开源的游戏开发框架,基于Python、Objective-C和C++等语言实现,它提供了丰富的2D...

    cocos2d-x3.9 数独小游戏

    对于Android和iOS平台,cocos2d-x提供了原生接口,可以访问系统服务,如存储、网络、通知等。例如,游戏进度的保存和加载可能需要用到本地存储,而联网功能则可以用于排行榜、分享等社交功能。 最后,项目中的`apk`...

    cocos2d-js弹窗组件

    在Cocos2d-js中,弹窗组件通常用于显示临时的通知、用户确认操作、展示设置或进行其他交互。通过这个组件,开发者可以快速地创建各种不同类型的弹窗,如信息提示框、警告框、输入框等,而不必从头编写复杂的UI代码。...

    cocos2d的游戏暂停

    在游戏开发领域,cocos2d是一个非常流行的2D游戏框架,它提供了丰富的功能和工具,使得开发者可以轻松创建各种类型的游戏。"cocos2d的游戏暂停"这一主题是游戏开发中的一个关键概念,它涉及到如何在游戏中实现暂停...

    cocos2d/box2d简单弹球程

    《cocos2d/box2d简单弹球程序解析》 在游戏开发领域,cocos2d和Box2D是两个极为重要的工具。cocos2d是一个开源的2D游戏框架,广泛应用于iOS、Android以及Mac OS X等平台,提供丰富的图形绘制、动画制作和物理模拟等...

    cocos2d中的层以及层之间的传值

    在iOS游戏开发中,Cocos2d是一个广泛使用的2D游戏引擎,它为开发者提供了丰富的图形绘制、动画处理以及游戏逻辑实现的工具。本篇将深入探讨Cocos2d中的"层"(Layer)概念以及层与层之间如何传递值。 层在Cocos2d中...

    cocos2d-x手机游戏开发 跨iOS、Android和沃Phone平台

    ### cocos2d-x手机游戏开发跨iOS、Android和沃Phone平台 #### 一、Cocos2d-x简介 Cocos2d-x 是一个开源的移动游戏开发框架,它支持多种编程语言,包括 C++、JavaScript 和 Lua。由于其强大的功能和良好的跨平台...

    Cocos2d-x 中使用多线程

    在Cocos2d-x游戏引擎中,多线程的使用是一项关键的技术,它能帮助开发者实现游戏的异步处理,提高程序的响应速度和效率。本文将深入探讨Cocos2d-x中如何创建和管理多线程。 首先,我们要了解线程的基本概念。线程是...

    cocos2d-x 2012-03-31开发者大会演讲稿PDF(3)

    ### cocos2d-x 2012-03-31开发者大会演讲稿PDF(3)—x86架构上基于cocos2d-x的游戏开发与优化 #### 一、概述 在2012年3月31日举办的cocos2d-x开发者大会上,演讲者分享了关于在x86架构上利用cocos2d-x进行游戏开发...

    GameBoard-《cocos2d-x如何实现MVC》系列中的完整实例

    在游戏开发领域,cocos2d-x是一款广泛使用的2D游戏引擎,它基于C++,同时支持Lua和JavaScript脚本语言。"GameBoard-《cocos2d-x如何实现MVC》系列中的完整实例"是一个关于如何在cocos2d-x中应用Model-View-...

    cocos2d-x 触摸事件 讲解

    ### cocos2d-x 触摸事件讲解 在游戏开发领域,特别是移动平台上的游戏开发,交互体验至关重要。本文将深入探讨cocos2d-x框架下的触摸事件处理机制,旨在帮助开发者更好地理解和掌握如何通过cocos2d-x实现高质量的...

    Cocos2d-x 3.2 自动更新 -- 使用AssetsManager更新游戏资源包

    Cocos2d-x是一款流行的开源跨平台2D游戏开发框架,广泛应用于iOS、Android和Windows等多平台的游戏开发。在游戏开发过程中,为了提供更好的用户体验和持续服务,更新游戏资源包是必不可少的。Cocos2d-x 3.2版本引入...

    cocos2d-x socket网络连接

    《cocos2d-x与BSD Socket网络连接详解》 在游戏开发领域,cocos2d-x是一个广泛应用的2D游戏引擎,它支持多平台开发,包括iOS、Android、Windows等。而网络通信是游戏开发中不可或缺的一部分,尤其对于网络游戏而言...

    cocos2d——打地鼠游戏

    Cocos2d提供了AudioEngine或SimpleAudioEngine模块来播放背景音乐和音效,如打击地鼠的声音和成功或失败的通知。 8. **游戏状态管理**:游戏通常有多个状态,如开始、进行中、暂停、结束等。使用GameState管理器类...

    COCOS2D-X之CurL下载图片Demo

    COCOS2D-X是一款广泛使用的开源2D游戏开发框架,它基于C++,并提供了JavaScript和Lua的绑定,使得开发者可以选择不同的编程语言进行游戏开发。在COCOS2D-X中,有时我们需要从网络上动态下载图片资源,以便在游戏中...

    cocos2d-x sneaky input demo

    《cocos2d-x框架下的Sneaky Input应用解析》 Cocos2d-x是一款流行的开源游戏开发框架,它基于C++,支持多平台开发,包括iOS、Android、Windows等。在开发过程中,输入控制是游戏的核心部分,而Sneaky Input就是...

    Cocos2d-x设计模式.docx

    在Cocos2d-x中,观察者模式(Observer Pattern)是一个常见的行为型模式,它允许一个对象(被观察者)在状态变化时通知其他对象(观察者)。 观察者模式的核心思想是定义一个一对多的依赖关系,当一个对象的状态...

    Learn cocos2d Game Development with iOS5 英文高清原版 (非扫描)

    - **iOS5概述**:iOS5是苹果公司在2011年发布的一个重大更新,引入了许多新功能,如通知中心、Siri语音助手等。 - **开发环境**:本书着重介绍了如何在iOS5环境下使用cocos2d进行游戏开发,包括安装配置、工具链选择...

    cocos2d-x多线程异步加载资源

    在Cocos2d-x游戏开发中,资源管理是至关重要的,特别是对于大型或者资源密集型的游戏,异步加载资源能够显著提升用户体验,避免因等待资源加载而造成的卡顿。本篇将深入探讨如何利用Cocos2d-x和Boost库实现多线程...

    cocos2d-x 2.0 的CCListView使用

    Cocos2d-x是一款开源的、跨平台的2D游戏开发框架,被广泛应用于移动游戏开发。在cocos2d-x 2.0版本中,引入了CCListView组件,为开发者提供了一个高效的列表视图控件,适用于创建滚动列表、下拉菜单等UI元素。下面...

Global site tag (gtag.js) - Google Analytics