Cocos2d-x CCNotificationCenter 通知中心
相信接触过ios开发的人来说对NSNotificationCenter都不陌生。而在cocos2d-x中也参照这个类,提供了CCNotificationCenter这个类,用作通知中心。
那么NotificationCenter的介绍请看这篇文章:点击打开链接
而我主要是使用NotificationCenter 进行不同类之间的参数传递。(譬如说在两个layer之间进行参数的传递)
下面对这个CCNotificationCenter类如何使用进行简单的介绍。
1、首先这个类的位置:cocos2dx/support
2、
注意这是一个单例类
使用时要获取到单例对象:
- /** Gets the single instance of CCNotificationCenter. */
- static CCNotificationCenter *sharedNotificationCenter(void);
发送通知:
主要用到的两个方法:
- void postNotification(const char *name);
- void postNotification(const char *name, CCObject *object);
例子:
- // Define this at the header
- #define MY_NOTIFICATION "MY_NOTIFICATION"
- CCNotificationCenter::sharedNotificationCenter()->postNotification(MY_NOTIFICATION, (CCObject*)1);
接收通知(添加监听):
方法:
- void addObserver(CCObject *target,
- SEL_CallFuncO selector,
- const char *name,
- CCObject *obj);
例子:
- CCNotificationCenter::sharedNotificationCenter()->addObserver(this, callfuncO_selector(HelloWorld::myNotification), MY_NOTIFICATION, NULL);
- // Handle the notification
- void HelloWorld::myNotification(CCObject* obj)
- {
- CCLOG("Notification achieved. ID: %i", (int)obj);
- }
注意:一般的在接受通知的一方在接受完通知后需要remove监听。
方法:
- void removeObserver(CCObject *target,const char *name);
- int removeAllObservers(CCObject *target);
(注意第二个方法: returns the number of observers removed)
例子:
- HelloWorld::~HelloWorld()
- {
- CCNotificationCenter::sharedNotificationCenter()->removeObserver(this, MY_NOTIFICATION);
- // CCNotificationCenter::sharedNotificationCenter()->removeAllObservers(this);
- }
很简单吧!
参考文章: http://www.plungeinteractive.com/blog/2012/09/20/notification-center-extension-for-cocos2d-x/
补充 :
最近在使用 CCNotificationCenter 在两个 scene 之间传递参数的过程中遇到一个很容易出错的细节,下面简单记录一下。
我们知道,使用 CCNotificationCenter 在两个 scene 之间传递参数,接受方scene 要添加监听,也就是 addObserver ;而发送方scene是要发送消息,也就是 postNotification。
那么二者有先后的顺序吗?
注意:一定要先注册监听,然后发送消息,这样才可以实现数据的传递。--- 当然,这个也是很容易理解的吧。
而我就恰恰没有注意到这个问题,所以导致无法传递数据。
- <pre name="code" class="cpp">void HelloWorld::displayCallBack(cocos2d::CCNode *pNode)
- {
- //发送消息
- CCNotificationCenter::sharedNotificationCenter()->postNotification(MNOTIFICATION, (CCObject*)1);
- CCScene* scene = TargetRunScene::scene();
- CCDirector::sharedDirector()->pushScene(CCTransitionSlideInL::create(0.8f, scene));
- }</pre>
注意到:消息的接受方是 TargetRunScene ,那么我现实发送了消息,然后才初始化接受方的 scene,那么显然接收方的添加监听是在发送了消息后的,所以这样的话,是无法传递参数的。
那么,如何解决呢?
简单啦,就是讲发送消息的放在 TargetRunScene 初始化之后就可以了。
- void HelloWorld::displayCallBack(cocos2d::CCNode *pNode)
- {
- CCScene* scene = TargetRunScene::scene();
- CCDirector::sharedDirector()->pushScene(CCTransitionSlideInL::create(0.8f, scene));
- //发送消息
- CCNotificationCenter::sharedNotificationCenter()->postNotification(MNOTIFICATION, (CCObject*)1);
- }
相关推荐
本文将详细介绍如何在Cocos2d中实现视频播放,以及相关的步骤和技术要点。 首先,我们需要了解Cocos2d的基础知识。Cocos2d是一个开源的游戏开发框架,基于Python、Objective-C和C++等语言实现,它提供了丰富的2D...
对于Android和iOS平台,cocos2d-x提供了原生接口,可以访问系统服务,如存储、网络、通知等。例如,游戏进度的保存和加载可能需要用到本地存储,而联网功能则可以用于排行榜、分享等社交功能。 最后,项目中的`apk`...
在Cocos2d-js中,弹窗组件通常用于显示临时的通知、用户确认操作、展示设置或进行其他交互。通过这个组件,开发者可以快速地创建各种不同类型的弹窗,如信息提示框、警告框、输入框等,而不必从头编写复杂的UI代码。...
在游戏开发领域,cocos2d是一个非常流行的2D游戏框架,它提供了丰富的功能和工具,使得开发者可以轻松创建各种类型的游戏。"cocos2d的游戏暂停"这一主题是游戏开发中的一个关键概念,它涉及到如何在游戏中实现暂停...
《cocos2d/box2d简单弹球程序解析》 在游戏开发领域,cocos2d和Box2D是两个极为重要的工具。cocos2d是一个开源的2D游戏框架,广泛应用于iOS、Android以及Mac OS X等平台,提供丰富的图形绘制、动画制作和物理模拟等...
在iOS游戏开发中,Cocos2d是一个广泛使用的2D游戏引擎,它为开发者提供了丰富的图形绘制、动画处理以及游戏逻辑实现的工具。本篇将深入探讨Cocos2d中的"层"(Layer)概念以及层与层之间如何传递值。 层在Cocos2d中...
### cocos2d-x手机游戏开发跨iOS、Android和沃Phone平台 #### 一、Cocos2d-x简介 Cocos2d-x 是一个开源的移动游戏开发框架,它支持多种编程语言,包括 C++、JavaScript 和 Lua。由于其强大的功能和良好的跨平台...
在Cocos2d-x游戏引擎中,多线程的使用是一项关键的技术,它能帮助开发者实现游戏的异步处理,提高程序的响应速度和效率。本文将深入探讨Cocos2d-x中如何创建和管理多线程。 首先,我们要了解线程的基本概念。线程是...
### cocos2d-x 2012-03-31开发者大会演讲稿PDF(3)—x86架构上基于cocos2d-x的游戏开发与优化 #### 一、概述 在2012年3月31日举办的cocos2d-x开发者大会上,演讲者分享了关于在x86架构上利用cocos2d-x进行游戏开发...
在游戏开发领域,cocos2d-x是一款广泛使用的2D游戏引擎,它基于C++,同时支持Lua和JavaScript脚本语言。"GameBoard-《cocos2d-x如何实现MVC》系列中的完整实例"是一个关于如何在cocos2d-x中应用Model-View-...
### cocos2d-x 触摸事件讲解 在游戏开发领域,特别是移动平台上的游戏开发,交互体验至关重要。本文将深入探讨cocos2d-x框架下的触摸事件处理机制,旨在帮助开发者更好地理解和掌握如何通过cocos2d-x实现高质量的...
Cocos2d-x是一款流行的开源跨平台2D游戏开发框架,广泛应用于iOS、Android和Windows等多平台的游戏开发。在游戏开发过程中,为了提供更好的用户体验和持续服务,更新游戏资源包是必不可少的。Cocos2d-x 3.2版本引入...
《cocos2d-x与BSD Socket网络连接详解》 在游戏开发领域,cocos2d-x是一个广泛应用的2D游戏引擎,它支持多平台开发,包括iOS、Android、Windows等。而网络通信是游戏开发中不可或缺的一部分,尤其对于网络游戏而言...
Cocos2d提供了AudioEngine或SimpleAudioEngine模块来播放背景音乐和音效,如打击地鼠的声音和成功或失败的通知。 8. **游戏状态管理**:游戏通常有多个状态,如开始、进行中、暂停、结束等。使用GameState管理器类...
COCOS2D-X是一款广泛使用的开源2D游戏开发框架,它基于C++,并提供了JavaScript和Lua的绑定,使得开发者可以选择不同的编程语言进行游戏开发。在COCOS2D-X中,有时我们需要从网络上动态下载图片资源,以便在游戏中...
《cocos2d-x框架下的Sneaky Input应用解析》 Cocos2d-x是一款流行的开源游戏开发框架,它基于C++,支持多平台开发,包括iOS、Android、Windows等。在开发过程中,输入控制是游戏的核心部分,而Sneaky Input就是...
在Cocos2d-x中,观察者模式(Observer Pattern)是一个常见的行为型模式,它允许一个对象(被观察者)在状态变化时通知其他对象(观察者)。 观察者模式的核心思想是定义一个一对多的依赖关系,当一个对象的状态...
- **iOS5概述**:iOS5是苹果公司在2011年发布的一个重大更新,引入了许多新功能,如通知中心、Siri语音助手等。 - **开发环境**:本书着重介绍了如何在iOS5环境下使用cocos2d进行游戏开发,包括安装配置、工具链选择...
在Cocos2d-x游戏开发中,资源管理是至关重要的,特别是对于大型或者资源密集型的游戏,异步加载资源能够显著提升用户体验,避免因等待资源加载而造成的卡顿。本篇将深入探讨如何利用Cocos2d-x和Boost库实现多线程...
Cocos2d-x是一款开源的、跨平台的2D游戏开发框架,被广泛应用于移动游戏开发。在cocos2d-x 2.0版本中,引入了CCListView组件,为开发者提供了一个高效的列表视图控件,适用于创建滚动列表、下拉菜单等UI元素。下面...