ActionEditor(动作/技能编辑器)

有人考虑过使用AS3做一个Flash CS出来么?好吧,我整了个。很酷不是吗?

未命名-1

我目前所在的项目组正在制作一款格斗类的页游,游戏里有许多英雄,每个英雄又有许多技能,因此需要有一个能够批量制作技能的工具。在我来到这个项目组之前就已经存在了这么一个工具,它的名字也叫ActionEditor,我现在做的这个可以叫做ActionEditor2。既然这个ActionEditor长得这么像Flash CS,为啥不直接使用Flash CS制作技能呢?因为Flash CS只能制作表现,而我们的这个不但能制作表现,还能制作技能逻辑。

旧有的ActionEditor虽然可以完成技能制作的任务,不过其操作卡到爆炸。另外还有很多值得吐槽的地方,比如时间轴拖着拖着就没了;再比如把场景中的一个元件从P0点拖动到P1点,然后如果你想要撤销的话,那么它会P0.9->P0.8->P0.7…这样一路挪回去①。最坑爹的是,它会弄崩你的桌面!平均每隔20分钟,你就会面对一次“Windows资源管理器已停止工作”……

不过这依旧不是我重写ActionEditor的理由。反正这工具的使用者是策划和美术,他们用得爽不爽关我毛事呢?但旧ActionEditor是由以前的一个同事写的,他现在已经离职了。后来这个工具的维护工作又陆续由另外两个同事接手,现在接力棒传到了我的手中,我发现这代码写得真心烂……(据老大说,最初写这个工具的同学是一位实习生,临时工你懂)反正就是很烂,以致我想要修改其中的某些模块,或者加入新的功能,都举步维艰。

不知诸位有没有过这样的经历,你需要维护一份旧有代码,而维护这份代码需要花费如此大量的精力,你觉得还不如重写来的轻松。我是这么想的,也这么做了,我感觉很好。我用下班后以及周末的休息时间做的这件事,包括界面的制作,前后花了大半个月。现在新的ActionEditor代码量只有原来的三分之二,不但实现了以前所有的功能,而且用户体验上升了不止一个档次(就使用过的策划说,操作如丝般顺滑)。

具体实现细节也没什么好说的,唯一值得一提的是对MVC的应用了。旧有ActionEditor代码最大的一个问题就是对数据的操作东一句西一句,散布在程序各处,维护起来非常头大。我这里使用了简化版的MVC,没有Controller。架构大致如下:

未命名-1

所有对数据的操作通过DataProxy执行,DataRepository用于记录历史操作。由于我的Undo和Redo是基于数据的,因此DataRepository中储存的实际是每个操作执行前数据的快照。每个UI界面会向DataProxy注册Event,Event以字符串作为标识。DataProxy在执行操作后会将数据快照与Event同时存入DataRepository。这样,无论是在操作、Undo或Redo后,DataProxy都可以通过Event通知相应的视图更新数据显示。

另外考虑一下这个场景,比如当我拖动场景中的元件时,我希望属性面板中相应的属性数字会同步发生变化。同时当我修改属性面板中属性的值时,我希望场景中的元件能够出现实时预览效果。由于场景这个View和属性面板这个View都订阅了同一个事件,因此假如在鼠标拖动元件的过程中,或者是键盘输入的过程中通过DataProxy实时操纵数据,就可以达到这个效果。不过,由于这会导致DataRepository在一瞬间存入大量的快照,因此出现上文①中所述的问题。解决方法其实也很简单,让DataProxy操作一份未入库的数据,另设一个标志位告诉DataProxy是否要在操作完成后将数据入库。这样,在遇到鼠标拖动这种需要实时预览的情况时,只要手动开关一下标志位,保证仅有最终的修改会入库即可。

ActionEditor(动作/技能编辑器)》上有7条评论

发表评论

电子邮件地址不会被公开。 必填项已用*标注