CEGUI中文显示问题的解决方法
2011-10-02 12:38
471 查看
论坛上有好多朋友困惑于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,Avarage FPS,Worst FPS,Best FPS,Triangle Count这几项改成当前帧数:,平均帧数:,最差帧数:,最优帧数:,三角形数:。找到OceanDemo_FrameListener::updateStats,看到了吧。我们将原先的
static CEGUI::String currFps = "Current FPS: ";
static CEGUI::String avgFps = "Avarage FPS: ";
static CEGUI::String bestFps = "Best FPS: ";
static CEGUI::String worstFps = "Worst FPS: ";
static CEGUI::String tris = "Triangle Count: ";
修改为
static CEGUI::String currFps = (CEGUI::utf8*)Ogre::UTFString(L"当前帧率:").asUTF8_c_str();
static CEGUI::String avgFps = (CEGUI::utf8*)Ogre::UTFString(L"平均帧率:").asUTF8_c_str();
static CEGUI::String bestFps = (CEGUI::utf8*)Ogre::UTFString(L"最优帧率:").asUTF8_c_str();
static CEGUI::String worstFps = (CEGUI::utf8*)Ogre::UTFString(L"最差帧率:").asUTF8_c_str();
static CEGUI::String tris = (CEGUI::utf8*)Ogre::UTFString(L"三角形数:").asUTF8_c_str();
最后要注意的是,凡是见到汉字的地方都要保存为Unicode(UTF-8)格式。我用VS2005在 文件-高级保存选项 中选择Unicode(UTF-8 带签名)。
好了,都做完了。编译链接一下看看吧。
PS:用layout文件预制gui时可以直接把Text 的value设置为汉字如:
同样也要保存为utf-8。
见到论坛上有好多朋友困惑于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,Avarage FPS,Worst FPS,Best FPS,Triangle Count这几项改成当前帧数:,平均帧数:,最差帧数:,最优帧数:,三角形数:。找到OceanDemo_FrameListener::updateStats,看到了吧。我们将原先的
static CEGUI::String currFps = "Current FPS: ";
static CEGUI::String avgFps = "Avarage FPS: ";
static CEGUI::String bestFps = "Best FPS: ";
static CEGUI::String worstFps = "Worst FPS: ";
static CEGUI::String tris = "Triangle Count: ";
修改为
static CEGUI::String currFps = (CEGUI::utf8*)Ogre::UTFString(L"当前帧率:").asUTF8_c_str();
static CEGUI::String avgFps = (CEGUI::utf8*)Ogre::UTFString(L"平均帧率:").asUTF8_c_str();
static CEGUI::String bestFps = (CEGUI::utf8*)Ogre::UTFString(L"最优帧率:").asUTF8_c_str();
static CEGUI::String worstFps = (CEGUI::utf8*)Ogre::UTFString(L"最差帧率:").asUTF8_c_str();
static CEGUI::String tris = (CEGUI::utf8*)Ogre::UTFString(L"三角形数:").asUTF8_c_str();
最后要注意的是,凡是见到汉字的地方都要保存为Unicode(UTF-8)格式。我用VS2005在 文件-高级保存选项 中选择Unicode(UTF-8 带签名)。
好了,都做完了。编译链接一下看看吧。
PS:用layout文件预制gui时可以直接把Text 的value设置为汉字如:
同样也要保存为utf-8。
本教程只是对中文显示做出一些说明,对于其他问题请参阅其他相关文档。本教程使用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,Avarage FPS,Worst FPS,Best FPS,Triangle Count这几项改成当前帧数:,平均帧数:,最差帧数:,最优帧数:,三角形数:。找到OceanDemo_FrameListener::updateStats,看到了吧。我们将原先的
static CEGUI::String currFps = "Current FPS: ";
static CEGUI::String avgFps = "Avarage FPS: ";
static CEGUI::String bestFps = "Best FPS: ";
static CEGUI::String worstFps = "Worst FPS: ";
static CEGUI::String tris = "Triangle Count: ";
修改为
static CEGUI::String currFps = (CEGUI::utf8*)Ogre::UTFString(L"当前帧率:").asUTF8_c_str();
static CEGUI::String avgFps = (CEGUI::utf8*)Ogre::UTFString(L"平均帧率:").asUTF8_c_str();
static CEGUI::String bestFps = (CEGUI::utf8*)Ogre::UTFString(L"最优帧率:").asUTF8_c_str();
static CEGUI::String worstFps = (CEGUI::utf8*)Ogre::UTFString(L"最差帧率:").asUTF8_c_str();
static CEGUI::String tris = (CEGUI::utf8*)Ogre::UTFString(L"三角形数:").asUTF8_c_str();
最后要注意的是,凡是见到汉字的地方都要保存为Unicode(UTF-8)格式。我用VS2005在 文件-高级保存选项 中选择Unicode(UTF-8 带签名)。
好了,都做完了。编译链接一下看看吧。
PS:用layout文件预制gui时可以直接把Text 的value设置为汉字如:
同样也要保存为utf-8。
见到论坛上有好多朋友困惑于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,Avarage FPS,Worst FPS,Best FPS,Triangle Count这几项改成当前帧数:,平均帧数:,最差帧数:,最优帧数:,三角形数:。找到OceanDemo_FrameListener::updateStats,看到了吧。我们将原先的
static CEGUI::String currFps = "Current FPS: ";
static CEGUI::String avgFps = "Avarage FPS: ";
static CEGUI::String bestFps = "Best FPS: ";
static CEGUI::String worstFps = "Worst FPS: ";
static CEGUI::String tris = "Triangle Count: ";
修改为
static CEGUI::String currFps = (CEGUI::utf8*)Ogre::UTFString(L"当前帧率:").asUTF8_c_str();
static CEGUI::String avgFps = (CEGUI::utf8*)Ogre::UTFString(L"平均帧率:").asUTF8_c_str();
static CEGUI::String bestFps = (CEGUI::utf8*)Ogre::UTFString(L"最优帧率:").asUTF8_c_str();
static CEGUI::String worstFps = (CEGUI::utf8*)Ogre::UTFString(L"最差帧率:").asUTF8_c_str();
static CEGUI::String tris = (CEGUI::utf8*)Ogre::UTFString(L"三角形数:").asUTF8_c_str();
最后要注意的是,凡是见到汉字的地方都要保存为Unicode(UTF-8)格式。我用VS2005在 文件-高级保存选项 中选择Unicode(UTF-8 带签名)。
好了,都做完了。编译链接一下看看吧。
PS:用layout文件预制gui时可以直接把Text 的value设置为汉字如:
同样也要保存为utf-8。
相关文章推荐
- CEGUI中文显示问题的解决方法
- SQLServer乱码问题的分析及解决方法(中文字符被存入数据库后,显示为乱码)
- Fedora中文显示问题解决方法(包括目录,xmms,gaim)
- Xshell4,中文显示乱码问题解决方法:
- php 中文字符入库或显示乱码问题的解决方法
- cocos2d-x中中文显示问题解决方法二
- 崩溃,source Insight显示linux代码中文注释乱码问题,以及很傻很天真的解决方法
- ubuntu14.04下MYSQL显示中文乱码问题解决方法
- DTK串口重定向(SOL)时中文显示问题解决方法
- cocos2d中文显示问题的解决方法
- 【iReport学习一】iReport 3.7版本中,PDF中文显示问题解决方法
- SQLServer乱码问题的分析及解决方法(中文字符被存入数据库后,显示为乱码)
- php 中文字符入库或显示乱码问题的解决方法
- SecureCRT中文显示乱码问题的解决方法
- j2ee由于tomcat配置问题显示中文乱码的解决方法
- Android 代码中文字在手机上显示乱码问题解决方法
- Ubuntu/Debian下JAVA 中文/图片中文字体乱码显示问题解决方法
- jsp中文显示问号问题解决方法
- DOS命令行窗口mysql中文显示乱码问题解决方法
- SecureCRT中文显示乱码问题的解决方法