使用 PureMVC 和 Cocos2d-js 构建游戏项目 II
去年九月份写了一篇《使用 PureMVC 和 Cocos2d-js 构建游戏项目》,阐述了在 cocos2d-js 中使用 PureMVC 框架的想法,并在项目中试水后感觉效果也比较理想。但是整个框架中令我最不满意的两点就是直接在 Mediator 中处理层级和场景栈以及保存状态。
对于前者,官方的《PureMVC 最佳实践》一书里曾提到:
Page.28 虽然 Mediator 可以从 View 获取其他的 Mediator, 通过 API 访问、操作它们。但这样是很不好的, 它会导致 View 下成员的相互依赖, 这违反了“改变一个不影响其他”的目的。
之前设计的框架中处理层级的逻辑是在基类(NestMediator)中实现的。框架中的所有界面相关的 Mediator 子类都继承它。使用的操作也只涉及基类开放的 API 。而各个子类之间不再有其它的关联。但即使是这样,心里还是感觉不舒坦。
对于后者,使用 Mediator 保存状态以便出栈的时候恢复场景使用——这是当时感觉比较有创意的想法。但是后来仔细想想状态应该是属于 Model 层维护的东西才对啊。放在栈里的应该是数据,而不是 Mediator 。
当前的项目越做越复杂,一直找不到一个合适的契机进行重构,所以只能寄希望于新的项目了。正好近期公司有其它项目组准备启动新的游戏项目,也打算使用 Cocos2d-js + PureMVC 来进行开发,希望我能够提供个框架的 DEMO 。于是我正好借此机会将新想法融入到新的框架中。
在新的框架中,我增加了 Context(上下文)的数据域,用于储放状态和层级关系。每一个 Context 对应一个 Mediator ,可用于恢复场景;并且使用 ContextProxy 维护根 Context 列表也就是所谓的场景栈。然后将原来 Mediator 处理层级的逻辑全部转移到 Command 中,这样一来,Mediator 如释重负,可以专心于处理 View 层的事情了。
项目的结构我在上一篇《cococs2d-jsList》的末尾彩蛋中给出。具体的思路,等我另开一篇 part 3 再详述吧。
¶2015/08/25 updated:
- 后续文章 使用 PureMVC 构建游戏项目 III
- 后续文章 使用 PureMVC 构建游戏项目 IV
13 条留言
强烈关注中,期待part 3.我目前也是参考了博主之前的实现,确实用起来比较复杂。也在考虑重构!!
猜想博主 是要考虑使用状态机来维护场景栈吗?
puremvc.js 的这个 statemachine 功能还是比较弱的,只是用它来切换场景而已。不过感觉有点多此一举,暂只是试试。场景栈主要还是由 ContextProxy 和 Command 来维护。
期待博主分享你的方案啊~~哈哈
博主, part3好久出来啊?非常期待啊
最近主程回家结婚了,我一个人忙不过来,等有空了再写 :)
part3 还会有吗?
博主,最近也在研究这块的实现方案,能给个联系方式么?谢谢你了,在线等!
请问博主,PART3w什么时候更新,期待你的下一期,获益良多!
最近这几天会陆续更新几篇,篇幅较长
请问博主,SubMediator如何继续NestMediator,是在puremvc.define内的parent吗?
是的,parent 属性表示要承继的父类。
请问博主,如何用puremvc设计一个带AI的敌人。并且可以通过工厂模式批量创建?
Disqus 留言存档