这样就需要一套合理的架构来清晰明白的定义各模块的分工,同时还要照顾到多人协作完成这部分工作时,每人能独立的处理自己的数据(包括数据和面板),而与其它数据尽量解耦。
曾经采用过的一些方案中,大致思路是:每个面板即是独立显示也是独立的数据容器,每次打开的时候向服务端请求所需要数据,采用http请求,响应数据直接在模块内处理,若对数据有操作从而影响到系统中的其它数据,抛事件到父级,再由父级调度去通知关联的面板。这种作法好处是前期人员分工很明确,互不干涉,但缺点也很明显,过多冗余的事件会在项目的中后期导致数据很混乱。
前一段时间接触魔兽世界,想弥补一下当时在学校时的缺憾,也就毫无疑问地接触到了魔曾的插件,于是乎第一念头,魔兽是怎么处理这种数据与面板之间的关系的,稍微谷歌之,就发现几个不错的网站 http://wowprogramming.com http://www.wowwiki.com,并下载WOW官方WoW_Interface,很快可以看到WOW Client与插件间的数据交互是基于事件,Client会在每一个状态改变的时候都抛出相应的事件,http://wowprogramming.com/docs/events可以看到其所有的事件,而插件需要某些数据只需要调用client提供的API即可获得所需要数据 http://wowprogramming.com/docs/api这里有所有的API。当然还有些细节需要再深入WoW_Interface去了解下。
这样看来,大部分游戏UI数据的处理方式是大同小异(甚至WoW_Interface里的xml布局文件的写法都与mxml文件的写法相像),只是WOW把WoW Client作为最大的父级,而所有的插件基于父级是相互独立的,只与父级间有event 与 api的交互。
那对于透明的WoW Client,我们就需要思考它保存数据的方式,是缓存了很多的数据在客户端呢还是每次都向服务端去请求数据,这个再找资料了解下WoW的私服应该就可以清楚,下次再来探讨,另外Client对api和event的封装手法也应该思考一下。
没有评论:
发表评论