Cocos2d-x设计模式发掘之八:中介者模式

上上周写了关于cocos2d-x里面的观察者模式,文章最后提到一个应用场景:“你的GameScene里面有两个layer,一个gameLayer,它包含了游戏中的对象,比如玩家、敌人等。另一个层是HudLayer,它包含了游戏中显示分数、生命值等信息。如何让这两个层相互通信。”

关于这两个层之间如何通信的问题,读者Llllong和我畅快淋漓地讨论了一番,详细的内容可以参考那篇文章的留言部分。最后,我们总结出三种通信方式:委托、观察者模式、中介者模式。(PS:剧透一下,下周跟大家一起来探讨一下cocos2d-x里面的委托设计模式。我去年翻译了cocos2d如何实现mvc系列文章,里面涉及到委托的使用,可是代码是objc写的,有一些童鞋不知道c++如何实现委托,导致port代码有困难。别急,下周我们见分晓。)

本文将延续前面几篇文章的风格,跟大家一起来探讨cocos2d-x里面的中介者模式。也非常欢迎读者对此文进行拍砖,很多思绪的火光,“拍着拍着”就冒出来了。

1、应用场景

谈到中介者模式这个词,我马上就想到了cocos2d-x里面的CCDirector类。这个类除了应用了单例模式,还应用了中介者模式。Why?因为它封装了CCScheduler、CCActionManager、CCTouchDispatcher、CCKeypadDispatcher和CCAccelerometer这五个对象的交互。它使得这几个对象之间的交互不需要显式地相互引用,使其耦合度变低。当然更多的是使得我们游戏中的对象可以方便地与这些类进行交互,而不需要显式地引用这些类。同时,由于CCDirector类被设计成单例类,这样更加方便了客户程序。

由于之前CCScheduler、CCActionManager、CCTouchDispatcher这些类都被设计成了单例类,现在通过CCDirector这个中介类,减少了系统中单例的数目,同时也使得这些类获得了单例的属性。(唯一实例和全局访问点都靠CCDirector类来保障,这也是我为什么在介绍单例模式的时候讲过一句话“至少需要一个单例模式”的原因,因为其它“单例”可以通过此单例也获得“单例的属性”)

补充:我这里介绍的CCDirector的应用场景,跟GoF标准中介者设计模式存在一定出入,但是,我觉得某些思想是相通的。GoF中提到的中介者模式的本质是“封装交互”,这一点在CCDirector类中并没有体现出来。我这里冒然将二者联系在一起,实属认识上的不足,可能得了所谓的“模式病”吧。大家注意区分一下就行啦。所以,我感觉有时候设计思想比模式本身更重要,希望我尽快修成正果。

2、使用该模式的优缺点

优点:

1)、把多个同事对象的交互封装到一个中介者对象中,使得同事对象之间松散耦合,互不依赖

2)、集中控制交互

3)、多对多变成了一对多

缺点:

1)、容易造成中介者对象变成巨无霸类,维护和修改变得更加困难

3、模式定义及一般实现

定义:

用一个中介对象来封装一系列的对象交互。中介者使得各对象不需要显式地相互引用,从而使其松散耦合,而且可以独立地改变它们之间的交互。

UML图:


一般实现:参考wikipedia

4、游戏开发中如何运用此模式

游戏世界里的对象关系非常复杂,如果设计得不好,极容易形成强耦合。而游戏天生又是需要经常更新、修改bug和升级的,这就导致了游戏程序的维护和扩展非常地难。使用中介者模式可以减少游戏世界里面对象之间的多对多关系,使之转变成多对一的关系。

关于中介者的实现,可以把AppDelegate类设计成中介者对象,也可以自定义中介者对象,比如GameManager类。把此类设计成单例类,可以方便访问,同时,此类可以拥有像gameScene,levelSaver等类的引用,方便其它对象与这些对象进行交互。

5、与其它模式的关系

中介者模式的实现可以采用单例模式,参考CCDirector的实现。同时,在处理同事对象之间的交互的时候,可以采用观察者模式。
摘自:http://www.zilongshanren.com/cocos2d-x-desin-patterns-8-mediator/


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: cocos2d-x 4. 学习之路 cocos2d-x是一款开源的跨平台游戏引擎,支持多种平台,包括iOS、Android、Windows、Mac OS X等。cocos2d-x 4.是最新版本,相比之前版本,它有很多新特性和改进,如增强的渲染性能、更好的3D支持、更好的物理引擎等。 如果你想学习cocos2d-x 4.,可以从以下几个方面入手: 1. 学习基础知识:了解cocos2d-x的基本概念、架构和工作原理,掌握cocos2d-x的编程语言和开发环境。 2. 学习API:熟悉cocos2d-x的API,包括场景管理、精灵、动画、音频、物理引擎等。 3. 学习示例代码:通过阅读和分析cocos2d-x的示例代码,了解如何使用cocos2d-x开发游戏。 4. 学习实践:通过实践开发小游戏,掌握cocos2d-x的开发流程和技巧,提高自己的编程能力。 总之,学习cocos2d-x 4.需要一定的时间和耐心,但只要你有兴趣和热情,相信你一定能够掌握它。 ### 回答2: cocos2d-x是一个强大的游戏引擎,可用于开发移动和桌面游戏。随着cocos2d-x更新至4.0版本,它的功能得到了大幅升级。如果你想学习cocos2d-x 4.0,以下是一些重要的步骤和建议。 1. 更改代码结构 cocos2d-x 4.0中启用了新的代码结构,旨在更好地实现模块化和解耦。新代码结构包括Core、Renderer、2d等模块,使代码更易于维护和升级。要理解新代码结构,请先阅读cocos2d-x官方文档,并针对各个模块学习和熟悉其API。 2. 学习新功能 cocos2d-x 4.0中引入了许多新功能,例如Shader、Render Queue等。学习新功能是非常必要的,因为它们将改变以前的游戏开发模式。了解这些新功能的实现原理,并在自己的项目中应用它们,有助于提高游戏性能和质量。 3. 学习C++11 cocos2d-x 4.0开始支持C++11标准,这意味着你可以使用C++11的新特性来编写更好的代码。要理解C++11的特性,建议通读一遍C++11的官方标准,并尝试在cocos2d-x项目中使用这些新特性。 4. 实战练习 最后,实战练习是学习任何技能的关键。为了更好地学习cocos2d-x 4.0,建议你尝试开发自己的游戏项目。通过尝试解决实际问题,你能更好地理解cocos2d-x的API,并在实践中掌握游戏开发的技术。 总而言之,学习cocos2d-x 4.0需要掌握新的代码结构、新的功能和C++11标准,并通过实际项目实战练习来加深理解。这需要一定的时间和耐心,但只要你认真学习、实践和不断尝试,必定能够取得成功。 ### 回答3: cocos2d-x 4.0是目前市面上非常流行的开源游戏开发引擎,在游戏开发领域有着较为广泛的应用。然而,学习cocos2d-x 4.0需要付出一定的努力和时间。以下是我对cocos2d-x 4.0学习之路的一些经验和建议。 1. 学习基础知识 在开始学习cocos2d-x 4.0之前,我们需要了解一些基础知识,比如C++语言、OpenGL ES等,这些都是cocos2d-x 4.0的底层实现技术。掌握这些基础知识会让我们从事游戏开发时更加得心应手。 2. 学习文档 学习cocos2d-x 4.0需要阅读官方文档,这些文档详细介绍了引擎的各个方面,而且是学习的最佳资料。文档里包括了引擎的安装、使用、开发以及调试等。建议大家先从官网下载文档,并且仔细阅读。 3. 实践和开发 掌握了基础知识以及学习了文档之后,最好的方式就是通过实践和开发来加深对cocos2d-x 4.0的理解。通过实际开发游戏来体验引擎的使用,这样能够更深刻的理解引擎的机制以及遇到的各种问题该如何解决。同时,通过找到一些相近的问题,并通过查阅文档、代码实现等方式来解决问题,可以增强自己的技术水平。 4. 参与社区 cocos2d-x 4.0的官方论坛以及社区非常活跃,里面的开发者也有着丰富的经验和技术,在学习中可以多向论坛、社区里的大牛请教,获得更多的技术指导,同时也可以参与讨论,提出自己的问题和思考来获得反馈,这样可以更快地提高自己的技术。 总之,学习cocos2d-x 4.0需要耐心和对游戏开发的热情。只有通过不断的学习与实践,我们才能最终掌握这个优秀的游戏开发引擎,从而创建属于自己的游戏作品。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值