UI编辑器优化

最近项目也挺忙的,一直想抽时间来改改我们项目的ui编辑器,只能用挤出来的时间来做了。

改造目的


  • 提高开发效率
  • 在尽可能少改动的前提下,解决热点需求即可

ui编辑器简介


年纪大概6,7年了吧。应该在出生后就没怎么改进过。MFC写的DLL,嵌入到游戏客户端中使用,好在有MFC基础,代码看起来挺亲切的:D。
需求完全是靠自己去想,平时用的时候有什么不爽的地方重要可以改掉,也可以过过PM的瘾。

改造点


  1. ui列表界面:根据首字母进行排序显示,搜索功能

  2. 新建ui窗口流程简化: 一键生成,默认模版(对应的:一键删除)

  3. 新建控件优化:默认控件模版

  4. 编辑器模式下控件默认可拖动

  5. 主窗口的相对位置

解决方案


1.ui列表界面:原来的设计只是简单的读取ui列表,放入ListView中

  • 痛点:列表显示非常杂乱,且没有排序规则

    根据首字母进行排序:CListView.SortItem 搞定。

  • 痛点:没有搜索功能,要查找某个ui的时候只能靠人肉!

    搜索优化:最初的想法是加入一个edit,在输入变化的时候自动选中对应的item项。但是在尝试做了之后发现几个问题:
    ListView的选中功能实在太弱,并且需要具有焦点的时候才能选中(有总是选中的属性,但是不符合需求),尝试未果之后考虑有没有其他的方式。
    最后决定用动态删减ListViewItem的方式来解决这个问题:每次输入变化的时候,清空ListView,遍历ui列表,insert符合要求的ui。

  • 痛点:由于加入搜索功能,dlg打开的时候焦点默认给到edit:

    细节更闪亮:D

2.新建窗口

  • 痛点:之前添加一个ui非常麻烦,要手动添加很多东西,而且是程序自己来干这个事情,费时费力。

    在编辑器提供一键创建窗口,可以让策划或者ui设计师来制作ui。
    基本都是字符串和文件操作,由于原有的体系比较繁杂,有部分硬编码,健壮性稍差。

  • 痛点:既然有生成就要对应删除

    就是生成过程的反过程,编码比较“硬”,纯属体力活了。

3.新建控件默认模版:

  • 痛点1:创建后没有默认参数!比如创建一个按钮,还有手动去改大小,图片,颜色等,非常麻烦。

    给各个控件配置默认的模版参数,这样只需要稍做修改就能完成需求。(每种控件都对应一个配置lua脚本)

4.可拖动控件

  • 痛点:不能拖动控件的编辑器怎么能叫编辑器!我们之前还用了好几年ORZ。

    当用编辑器打开窗口后,设置控件的可移动属性为true即可。问题在于我们的ui控件都是自己写的一套,所以有些控件并不支持窗口的移动。
    只能改动各种控件的消息处理代码了。

5.窗口的动态停靠位置(Dock)

  • 痛点:以前我们客户端的窗口大小是固定4个模式的,不同模式下的窗口位置定义都是写死的!大约1年前,改成了客户端可以自由改变大小,但编辑器没有对应的更新。

    编辑器可改变DockType,x,y 的偏移量。做到所见即所得。

n.其他细节

  • 打开ui后,控件树默认展开Main项。
  • 处理了发现的遗留的bug