被某人数次各应之后,我决定先写点东西让他鄙视我,这样能少被各应点。
第一篇我打算说说我最近的心得,关于游戏UI设计上一些问题的权衡,以及对CEGUI源代码以及设计思路的相似剖析。这次就先说说CEGUI吧。
现在国内很多游戏都在用它,很多开源项目也推荐用它,它足够的火,也足够的优秀,我非常的感谢crazy edit写出如此优秀的通用的游戏UI库,并且开源给我们这些广大的菜鸟学习。开始之前,先说说网上传来传去的中文解决方案,以及我发现的几个埋藏比较深的小问题。
1,中文解决方案:
CEGUI字符串内部使用32位unsigned int,所以设计上是支持中文的,但是为什么使用中文会出错呢?网上很多在讲用win32 api转换格式编码,其实这个没有解决问题的本质,我遇到过人不断的质疑我为什么没有解决,我用的好好的啊,恩,那我只能说,你一定没有通过过lua脚本处理中文字符串。对滴~错误本质最明显的就体现在了这里。lua脚本文件虽然使用utf8编码,可以支持中文,但是,lua和c的接口,已经将utf8编码转换成了ansi,而cegui的string的c_str输出的是utf8的编码,所以,一定会出错,解决方案也so easy,修改下c_str,然后替换下lua脚本头文件中的宏,就ok了。第二个中文问题,中文输入,只要在inject char时候进行ime判断,就ok了。
2,小问题:
第一个是cegui的文字编码map,这里在与xml时候交换数据时候,使用uint强制转换了int,所以如果文字编码大于0x7FFFFFFF,就会出错。
第二个是我在优化渲染效率时候遇到的,cegui中有部分控件的z layer没有设置,完全依赖于components draw的先后顺序,虽然运行不会出错,但是也算个小问题吧。
那现在就说说我对CEGUI的看法和一些问题的分析,cegui很灵活,非常灵活,太灵活。所以对于出用cegui的人来说,经常会遇到一些莫名的问题,其实对cegui理解深了,这些就不是问题了,但是如果作为一个类库,它暴露了一个问题,接口设计容易被误用,这是不合理滴。那作为一个这么NB的程序