最近负责一款2D客户端场景编辑器的开发工作,获益良多。现在就操作层面跟大家分享一下开发中的几个着重点。
1 事件响应模块:
编辑器的操作极其复杂,如果没有一个清晰的事件分发流程,操作逻辑处理起来苦不堪言。
主要的思路是设定编辑模式,然后在每个编辑模式下再有多个子模式。例如建筑编辑模式,放置建筑子模式等。
每个子模式下都有独立的鼠标和键盘响应处理,如左右键 按下弹起的响应等。
这样在进行逻辑处理时,先判断当前编辑器所处的模式和子模式,即可进入对应的响应操作。
2 场景对象层次:
编辑器的操作几乎都是基于对象的,设定一个层次清晰的对象结构,在进行对象操作时则顺风顺水。如:基本对象,建筑对象,建筑组对象等。
3 撤销重做模块:
如果没有做过类似的编辑器,应该不会知道这模块的重要性。
在实际的场景编辑中,常常编辑错了,就想恢复到编辑前的状态,这就用到了撤销重做的功能。
主要的实现思路是,当某个操作需要撤销重做功能时,注册一个对应的操作类,保存相关的参数,有对应的执行函数和撤销函数。
然后再把这操作保存到一个全局的操作列表,每执行一次撤销操作则把最后一个操作从操作列表中移除。
因为记录了相关的数据,所以在执行撤销操作时,可以完全回到编辑前的状态。
4 区域管理模块
障碍区,遮挡区,安全区,各种自定义区域等等,都是属于区域操作范畴。这种操作用得最多的就是画刷,所以画刷的设计好坏影响重大。
5 编辑态文件
即除了包括游戏数据外还保存很多游戏不用的数据,但在编辑器使用过程中却带来很多便利。
比较有利的一点是很多情况下导出的场景配置文件是二进制文件,所以看不到每个版本的修改内容,这时可通过对应的编辑态文件来对比。