zoukankan      html  css  js  c++  java
  • CEGUI中文显示问题的解决方法 四

      论坛上有好多朋友困惑于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。



  • 相关阅读:
    [bzoj 3048] [Usaco2013 Jan]Cow Lineup
    [bzoj 3192] [JLOI2013]删除物品
    搬迁至新博客的原因
    洛谷 P3317 [SDOI2014]重建(矩阵树定理+数学推导) [bzoj3534]
    [bzoj1002]: [FJOI2007]轮状病毒(矩阵树定理)
    [bzoj1006]: [HNOI2008]神奇的国度(最大势算法)
    高精度板子
    洛谷 P3211 [HNOI2011]XOR和路径(推dp+高斯消元)
    字符串--manacher算法(回文串匹配)
    洛谷 P2633 Count on a tree[bzoj2588](倍增lca+主席树)
  • 原文地址:https://www.cnblogs.com/sier/p/5676456.html
Copyright © 2011-2022 走看看