57.
58. 59. 60. 62. 63. 三: 1. 在CEGUI中使用layout文件(3) 2. 打开任意一个layout文件,可见其为一个树形结构,父子窗体 的组织结构比较清晰。 3. 5. 7. 9. window1\ 10. 11. 13. 15. 16. 17. 18. 由于使用的是TinyXML作的xml解析器,其是基于DOM的, 所以正合适。 19. 20. 注意文件当中的Property tag,这个是layout的重点,通过 设定这个东西,CEGUI就活起来了。 21. 23. 如果想在游戏中使用你编辑的layout文件,那么就不是单个文 件这么简单了。 24. 由于CEGUI当中的窗体名称是一个全局的向量,所以不能有同 名的窗体,这样,命名规则就成了一个问题,当游戏制作到了大规模的UI制作阶段,这个问题尤为明显。 25. 我的经验是如下的规则: 26. 27. 1. 规则1 Layout文件命名 28. layout文件以场景形式组织,每个layout文件对应一个场景下 的UI,文件名为场景的英文名称,首字母大写,如SampleScene.layout。 29. 2. 规则2 顶级控件命名&设定 30. layout文件内部使用Root_场景英文名的defaultWindow作 为根窗口(顶级窗口),如示例场景的UI使用 Root_SampleScence作为根窗口。顶级窗口大小为整个显示屏幕大小。 31. 3. 规则3 次级控件命名 32. Root窗口下一级UI控件使用 场景英文名+控件实际用途方式 命名,如示例场景下的背景图片命名为SampleSceneBackground。 33. 4. 规则4 其它控件命名 34. 次级以下控件使用 上一级控件名/控件自身控件名 的方式进 行命名,如示例场景下的退出按钮命名为 SampleSceneBackground/Quit。 35. 5. 规则 5 UI控件命名 36. UI控件命名规则为 UI控件名含义+控件类型(可选),如设置 按钮可命名为SampleSceneBackground/Settings 或者SampleSceneBackground/SettingsButton。 37. 38. 这样一来,只要文件名不同,就保证了UI控件没有重名了。 四: 论坛上有好多朋友困惑于CEGUI无法显示和输入中文的问题。输入问题暂且不说,起码显示中文应该不难吧。我研究了两天,其间不知用了多少遍Google,跑到CEGUI和OGRE的官方网站和论坛找了很久,都没有太多的帮助。也看了打工仔写的相关文档,但是好像需要修改源代码,然后重新编译。难道CEGUI的最新版0.5.1还不支持中文吗?!最后只好自己一点一点摸索。谁知竟然真的被我摸到了,呵呵。下面我就说一说,怎样用CEGUI显示中文。 本教程只是对中文显示做出一些说明,对于其他问题请参阅其他相关文档。本教程使 用OgreSDK中的Demo_Ocean为例。 第一步,我们需要准备一个中文字体,我选用的是Window XP系统自带的simhei.ttf(这个字体在系统文件夹WINDOWS\\Fonts中可以找到)。我们需要把它复制到Ogre安装目录中media下的fonts目录中(例如:C:\\OgreSDK\\media\\fonts),这个fonts目录中存放有例子中需要用到的字体文件。 第二步,我们需要准备一个simhei-12.font文件,这个文件可以用记事本编辑,然后保存到Ogre安装目录中media下的gui目录中(例如:C:\\OgreSDK\\media\\gui),其内容如下: 注意:切记不要写段,我最初在网上看到有朋友给出的教程有这个段的内容,说是将你的程序中需要用的字加在这个段中。但是,据我实验得出的结论是,如果加入这个段,会导致创建字体时发生异常,根据CEGUI.log中的提示,是“Glyphs is unknown”。 第三步,检查一下resources.cfg,看看上面用到的fonts和gui两个目录的路径是否正确,如果你是使用SDK的话应该没问题。 第四步,修改OceanDemoCegui.config,将原来的BlueHighway-12修改为SimHei-12。注意:大小写不要写错。 第五步,修改TaharezLookSkin.scheme,在????之前,增加我们的中文字体说明 注意:大小写不要写错。 第六步,打开OceanDemo.cpp,我们要将左下角的状态统计说明的Current FPS,