Your Ad Here
首页 | 编程语言 | 网站建设 | 游戏天堂 | 冲浪宝典 | 网络安全 | 操作系统 | 软件时空 | 硬件指南 | 病毒相关 | IT 认证
软讯网络 > 游戏天堂 > 游戏开发 > OGRE + CEGUI的中文问题
【标  题】:OGRE + CEGUI的中文问题
【关键字】:OGRE,CEGUI
【来  源】:http://blog.csdn.net/MikeFeng/archive/2007/04/04/1551234.aspx

OGRE + CEGUI的中文问题

Your Ad Here

  Copyright © MikeFeng QQ: 76848502

 
    在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::Logger::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::Window* sheet =
           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),其中包含了一些中文,有一行是这样的:(这个是免费打工仔提供的中文补丁包中的)
            <Property 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::Logger::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::Window* sheet =
           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);
    }
};
 
一起做游戏(一):【上一篇】
3D 游戏的开发流程:【下一篇】
【相关文章】
  • ogre手动创建窗口需要实现的东西
  • OGRE输入系统
  • 想在mangalore+CEGUI中使用stlport会报错的解决
  • Error:ORA-01033:ORACLE initialization or shutdown in progress错误解决
  • 《Pro OGRE 3D Programming》PDF版下载
  • 在CEGUI中使用layout文件(1)
  • 在CEGUI中使用layout文件(2)
  • 在CEGUI中使用layout文件(3)
  • put your own progress information in V$SESSION_LONGOPS
  • 阿来(一)---让你的OGRE demo也有loadingBar- -
  • 【随机文章】
  • PHP 高亮类
  • 高速卫星:来自太空的宽带
  • 将非模态对话框显示为模态对话框
  • Cacti的安装
  • cdmaOne和cdma2000标准体系及演进
  • tomcat 3.1在RedHat下的安装
  • [原创]XPE系统对Office2000安装、使用过程出现问题的解决方法
  • 50位韩国美女50种味道 【超全】[组图]
  • Linux内核编码风格
  • 如何监视系统剪贴板变化?
  • 【相关评论】
    没有相关评论
    【发表评论】
    姓名:
    邮件:
    随机码*
    评论*
          
    |  首 页  |  版权声明  |  联系我们   |  网站地图  |
    CopyRight © 2004-2007 软讯网络 All Rigths Reserved.