作者 firedragonpzy 地址:http://www.firedragonpzy.com.cn/index.php/archives/2103
想必读者一看这个题目又要纳闷了,神马又是“管理者模式”啊?
管理者(Manager)就是专门负责管理其它类的实例的类,比如Cocoa里面的NSFontManager、NSInputManager、NSFileManager和NSLayoutManager类。此模式和“二段构建模式”一样,也没有出现在GoF的23个设计模式中,但是《Cocoa设计模式》一书中有提及,感兴趣的读者可以去查阅一下。
1.应用场景:
在cocos2d-x里面有大量的应用,比如之前在介绍单例模式中提到的CCTextureCache, CCSpriteFrameCache, CCAnimationCache和CCShaderCache类。
这些管理者一般被设计成单例类。
为什么管理者类要设计成单例呢?因为管理者一般会采用key-value的形式来管理其它类的实例,每当需要获取一个管理者中的实例时,只需要提供一个惟一的键值字符串就可以得到一个与之对应的惟一实例。如果允许存在多个管理者实例的话,那么每个管理者都会维护各自的key-value pairs。这样显然就不能通过键值字符串来获得惟一对象实例了。
CCSpriteFrameCache类通过定制的plist文件来实例化一系列相关的CCSpriteFrame实例,然后只需要提供精灵帧的名字就可以得到相应的CCSpriteFrame实例了。从这个意义上来说,CCSpriteFrameCache类也可以说是一个工厂类,专门负责生产CCSpriteFrame实例。同时,如果精灵帧名字相同的话,那么获取的精灵帧实例也是相同的。
2.使用管理者模式的优缺点。
优点:为一组相关的对象提供一个统一的全局访问点,同时可以提供一些简洁的接口来获取和操作这些对象。同时,使用此模式来缓存游戏中的常用资源,可以提高游戏运行时性能。
缺点:由于管理者大多采用单例模式,所以,它继承了单例模式所有的缺点,这里就不再赘述了。
3.管理者模式的定义
管理者类(cache类)可以简化一些可以重用的资源(比如字体、纹理、精灵帧等)的创建和管理工作。管理者模式其实是个混合模式,它综合了单例模式、外观模式和工厂模式。该模式在游戏开发中比较常见,很多需要提升游戏运行性能的场合都运用了此模式。
此模式的动机:提供一个统一的接口来管理一组相关对象的实例化和访问。
它的一般实现如下:
class TestManager{ public: static TestManager *sharedTestManager(){ if (NULL == m_psManager) { m_psManager = new TestManager; instanceTable = CCDictionary::create(); instanceTable->retain(); } return m_psManager; } void purge(){ CC_SAFE_DELETE(m_psManager); CC_SAFE_RELEASE_NULL(instanceTable); } void registeInstance(const string& key,CCObject *obj){ instanceTable->setObject(ojb,key); } CCObject* getInstance(const string& key){ return instanceTable->objectForKey(key); } private: static TestManager* m_psManager; CCDictionary *instanceTable; //用来管理其它类的一组实例 };
TestManager* TestManager::m_psManager = NULL;
4.游戏开发中如何运用此模式
在cocos2dx游戏开发中,经常需要使用CCAnimate动作来播放动画,这些动作的创建运行时开销是比较大的,一般采用的方式都是在node的init方法中创建好,然后retain。之后需要使用的时候直接引用此动作即可,前提是你得声明许多CCAnimate对象的弱引用。这里,我们可以为之创建一个CCAnimateCache类,专门用来管理这些动画动作实例。这样对于游戏中经常变换状态需要更换不同的动画时,可以从此CCAniamteCache类中获取相应动画引用,非常方便,同时可以提高游戏性能。相应的,也可以为Action创建相应的类。
引申:但凡那些对象,在运行时创建的时间开销特别大时,而又要经常重复使用时,都可以采取此模式来提高运行时性能。
5.此模式经常与单例模式配合使用,它的一些设计思想也掺合了外观模式和工厂模式。
摘自:http://www.zilongshanren.com/cocos2d-x-design-pattern-3-managers/
欢迎关注关东升新浪微博@tony_关东升。
关注智捷课堂微信公共平台,了解最新技术文章、图书、教程信息
更多精品iOS、Cocos、移动设计课程请关注智捷课堂官方网站:http://www.zhijieketang.com
智捷课堂论坛网站:http://51work6.com/forum.php
相关推荐
12. **强大的社区支持**:由于其开源特性,Cocos2d-x拥有庞大的开发者社区,提供了许多第三方库和教程资源。 手册中可能涵盖的内容包括: 1. **安装与设置**:详细步骤指导如何配置开发环境,安装Cocos2d-x并创建新...
总的来说,这个cocos2d-x游戏实例将涵盖游戏开发的多个核心领域,包括UI设计、物理模拟、动画制作、事件处理、内存管理等,对于想要深入学习Cocos2d-x游戏开发的初学者来说,这是一个非常有价值的实践项目。...
总之,《cocos2d-x贼来了塔防》是Cocos2d-x技术的实践体现,从游戏设计到开发,都充分展示了这个框架的强大功能。无论是对游戏开发者还是对希望了解游戏开发的爱好者,深入研究这款游戏的源代码和资源都将是一次宝贵...
在Cocos2d-x这个流行的2D游戏开发框架中,设计模式扮演着至关重要的角色,它们使得代码更加灵活、可维护且易于扩展。设计模式是一种解决常见编程问题的经验总结,通常分为三大类:创建型模式、结构型模式和行为型...
通过以上分析,我们可以看到,基于cocos2d-x开发连连看游戏涉及到了游戏设计、编程技术、用户体验、资源管理等多个层面。对于初学者来说,这是一个很好的实践项目,可以深入理解cocos2d-x框架,同时提升自己的游戏...
10. **游戏框架设计**:理解"CocosTest"的整体架构和设计模式,如单例模式、观察者模式等,有助于我们构建自己的游戏框架。 总之,"Cocos2d-xGameTest"是一个很好的学习资源,通过解构和分析这个示例,可以全面了解...
2. **Cocos2d-x的消息系统**:`CCNotificationCenter`是Cocos2d-x的消息调度中心,它负责管理所有的通知订阅和发布。每个`CCNode`对象都可以成为观察者,通过`registerScriptHandler`方法订阅通知,通过`...
#### 三、Cocos2d-android架构详解 Cocos2d-android的架构设计非常清晰,主要由以下几个核心组件构成: 1. **CCApplication**:这是整个应用的入口点,负责初始化游戏环境,包括获取屏幕方向、系统语言等基本信息...
《cocos2d-x消除游戏源码解析与...总之,这个消除游戏源码是cocos2d-x初学者的一份宝贵教材,通过深入研究,不仅可以提升编程技能,还能锻炼解决问题和设计游戏的能力。在实践中不断探索,才能真正掌握游戏开发的艺术。
《cocos2d-x实现的超级玛丽》是一个基于cocos2d-x游戏引擎开发的经典游戏重制项目。cocos2d-x是一个强大的...对于学习cocos2d-x和游戏开发的初学者来说,这是一个很好的实践案例,可以深入理解游戏开发流程和技术细节。
通过学习和分析这个“cocos2d-x 飞机”项目,开发者不仅可以掌握cocos2d-x的基本用法,还能了解到游戏开发中的常见设计模式和技巧,如对象池、事件驱动编程、资源管理等,对于提升游戏开发能力大有裨益。
《飞机大战cocos2d-x简单版》是一款专为cocos2d-x初学者设计的简易游戏项目。通过这款游戏的编码实现,初学者可以深入理解cocos2d-x引擎的基本用法,掌握游戏开发的核心技术。 cocos2d-x是一款跨平台的2D游戏开发...
- **学习最佳实践**:通过研究cocos2D-x的源码,开发者可以学习到良好的编程习惯和设计模式,提升自己的编程能力。 总的来说,这个cocos2D-x的源代码包是一个宝贵的资源,无论你是初学者还是经验丰富的开发者,都...
而CocoStudio则是Cocos2d系列的一个配套工具,用于游戏的资源管理、UI设计和动画编辑,大大简化了游戏开发流程。 在"Cocos2d-html5基于CocoStudio编辑器开发的DemoBag"项目中,我们看到这两个工具的紧密结合,展现...
通过状态机的设计模式,可以有效地管理这些状态,确保游戏流程的顺畅。 7. **音频效果**: Cocos2d-x提供了`CocosDenshion`库用于音频处理,可以播放击打砖块、球碰撞挡板等音效,增加游戏的沉浸感。 总结,通过...
通过分析和学习这个游戏的源码,开发者不仅可以掌握Cocos2D-X的基本用法,还能了解到游戏开发中的各种设计模式和最佳实践。此外,对于初学者,这是一个绝佳的实践机会,可以帮助他们将理论知识应用到实际项目中,...
《深入解析Cocos2d-x开发iOS单机斗地主应用》 ...此外,斗地主作为一款经典扑克游戏,其逻辑复杂度适中,非常适合初学者进行实践,通过这个项目可以加深对Cocos2d-x的理解,为今后的复杂游戏开发打下坚实基础。