| 
在OGRE引擎中使用中文需要面对几个问题: 在CEGUI中使用中文 在输入框中处理IME消息 在Overlay中使用中文   本文解决的是第一个问题,即在CEGUI中使用中文   CEGUI插件在OGRE中的使用方法: Step 1: 初始化CEGUI::OgreCEGUIRenderer和CEGUI::System 例如     mGUIRenderer = new
			CEGUI::OgreCEGUIRenderer(mWindow,              Ogre::RENDER_QUEUE_OVERLAY, false, 3000, mSceneMgr);     mGUISystem = new
			CEGUI::System(mGUIRenderer);     CEGUI: ogger::getSingleton().setLoggingLevel(CEGUI::Informative)   Step 2: 加载scheme,并设置鼠标和字体的默认值 例如     CEGUI::SchemeManager::getSingleton().loadScheme(            (CEGUI::utf8*)"TaharezLookSkin.scheme");       mGUISystem->setDefaultMouseCursor(            (CEGUI::utf8*)"TaharezLook", (CEGUI::utf8*)"MouseArrow");     CEGUI::FontManager::getSingleton().createFont("simhei.font");     mGUISystem->setDefaultFont((CEGUI::utf8*)"simhei"); 这里的TaharezLookSkin.scheme在Samples\Media\gui中附带了,定义了一些控件的字体,样式。因为我们需要使用中文字体,所以可以拷贝一个simhei.ttf的字体到gui目录。然后编写simhei.font,参照其他.font文件的定义依葫芦画瓢即可。具体如下: <?xml version="1.0" ?> <Font Name="simhei" Filename="simhei.ttf" Type="FreeType" Size="10" NativeHorzRes="800" NativeVertRes="600" AutoScaled="true"/> 其中Name=”simhei”属性很重要,因为setDefaultFont的参数就是这个。   Step3: 加载layout 例如            CEGUI::WindowManager::getSingleton().loadWindowLayout(            (CEGUI::utf8*)"Demo8.layout");      mGUISystem->setGUISheet(sheet); 注意loadWindowLayout中的参数.layout文件一定要和Step2中loadScheme一致,就是说.layout中控件的样式需要在loadScheme中已经定义过,否则CEGUI就会报错。顺便提一下Samples\Common\bin\Debug\*.log都很有用,在程序出莫名异常的时候可以跟踪。因此别忘了在程序中设置生成log。Demo8.layout是一个UTF8格式的文件(头三个字节是EF BB BF),其中包含了一些中文,有一行是这样的:(这个是免费打工仔提供的中文补丁包中的)             < roperty Name="Text" Value="杀人游戏房间" />  你可以自己更改自带的layout文件,注意添加中文之后必须保存成UTF8格式。  
 代码如下:   #include <CEGUI/CEGUI.h> #include <CEGUI/CEGUIImageset.h> #include <CEGUI/CEGUISystem.h> #include <CEGUI/CEGUILogger.h> #include <CEGUI/CEGUISchemeManager.h> #include <CEGUI/CEGUIWindowManager.h> #include <CEGUI/CEGUIWindow.h> #include <CEGUI/CEGUIPropertyHelper.h> #include <CEGUI/elements/CEGUICombobox.h> #include <CEGUI/elements/CEGUIListbox.h> #include <CEGUI/elements/CEGUIListboxTextItem.h> #include <CEGUI/elements/CEGUIPushButton.h> #include <CEGUI/elements/CEGUIScrollbar.h> #include "OgreCEGUIRenderer.h" #include "OgreCEGUIResourceProvider.h"   #include "ExampleApplication.h"   class Demo : public ExampleApplication { private:     CEGUI::OgreCEGUIRenderer* mGUIRenderer;     CEGUI::System* mGUISystem; public:     Demo() {}        ~Demo()        {         //if(mEditorGuiSheet)         //{         //    CEGUI::WindowManager::getSingleton().destroyWindow(mEditorGuiSheet);         //}         if(mGUISystem)         {             delete mGUISystem;             mGUISystem = 0;         }         if(mGUIRenderer)         {             delete mGUIRenderer;             mGUIRenderer = 0;         }     } protected:     // Just override the mandatory create scene method       void createScene(void)     {        mGUIRenderer = new
			CEGUI::OgreCEGUIRenderer(mWindow,             Ogre::RENDER_QUEUE_OVERLAY, false, 3000, mSceneMgr);        mGUISystem = new
			CEGUI::System(mGUIRenderer);        CEGUI: ogger::getSingleton().setLoggingLevel(CEGUI::Informative);          // load scheme and set up defaults        CEGUI::SchemeManager::getSingleton().loadScheme(            (CEGUI::utf8*)"TaharezLookSkin.scheme");          mGUISystem->setDefaultMouseCursor(            (CEGUI::utf8*)"TaharezLook", (CEGUI::utf8*)"MouseArrow");        CEGUI::FontManager::getSingleton().createFont("simhei.font");        mGUISystem->setDefaultFont((CEGUI::utf8*)"simhei");                CEGUI::WindowManager::getSingleton().loadWindowLayout(            (CEGUI::utf8*)"Demo8.layout");         mGUISystem->setGUISheet(sheet);          // set the mouse cursor initially in the middle of the screen        mGUISystem->injectMousePosition((float)mWindow->getWidth() / 2.0f, (float)mWindow->getHeight() / 2.0f);     } };   
 
 Trackback: http://tb.blog.csdn.net/TrackBack.aspx?PostId=1551234  |