现在的位置: 首页 > 综合 > 正文

OGRE CEGUI LAYOUT

2018年01月16日 ⁄ 综合 ⁄ 共 3465字 ⁄ 字号 评论关闭

//CEGUI
 CEGUI::System *mSystem;
 CEGUI::OgreCEGUIRenderer *mRenderer;

  //通过已有的window和scenemanager创建CEGUI渲染器
  //创建mRenderer实例,导入.scheme文件,设置默认鼠标指针图像和默认字体
  mRenderer = new CEGUI::OgreCEGUIRenderer(mWindow, Ogre::RENDER_QUEUE_OVERLAY, false,3000, mSceneMgr);
  ////通过已有的CEGUI渲染器构造渲染系统
  mSystem = new CEGUI::System(mRenderer);
  //读入scheme文件,这里使用TaharezLookSkin,scheme文件中又关联到其他文件如font,imageset,looknfeel
  CEGUI::SchemeManager::getSingleton().loadScheme((CEGUI::utf8*)"TaharezLookSkin.scheme");
  mSystem->setDefaultMouseCursor((CEGUI::utf8*)"TaharezLook", (CEGUI::utf8*)"MouseArrow");
  //要用到中文字,使用中文字体,simhei(黑体)是自己要添加的还要制作一个.font文件,放到相应的位置
  //并在scheme文件中“调用”(添加字体选择)
  mSystem->setDefaultFont((CEGUI::utf8*)"simhei-12");

 

  /*cegui窗口界面布局有两种办法,一是手动创建,二是使用编辑器如CELayoutEditor(如图)制作layout(xml)文件
  下面分别使用两种方法制作A按钮和B视图为例


  */

  /*方法一:
  创建两个窗口,一个A按钮窗口,一个B视图窗口
  DefaultGUISheet,TaharezLook/Button为窗口类型,有关窗口类型的知识这里不探讨
  createWindow(类型,命名),A按钮名"quit",B视图名"root/viewtu"
  然后设置窗口的文字和大小,窗口内可以有子窗口,"root"窗口为跟窗口
  */
  //CEGUI::WindowManager *win = CEGUI::WindowManager::getSingletonPtr();
  //CEGUI::Window *sheet = win->createWindow("DefaultGUISheet", "root");

  ////A按钮窗口
  //CEGUI::Window *quit = win->createWindow("TaharezLook/Button", "quit");
  //quit->setText((CEGUI::utf8*)Ogre::UTFString(L"退出").asUTF8_c_str());
  //quit->setSize(CEGUI::UVector2(CEGUI::UDim(0.15,0), CEGUI::UDim(0.05, 0)));
  //sheet->addChildWindow(quit);

  ////B视图窗口
  ////setProperty中使用了名为"RttImage"的纹理映射到B视图窗口中
  //CEGUI::Window *si = win->createWindow((CEGUI::utf8*)"TaharezLook/StaticImage","root/viewtu");
  //si->setSize(CEGUI::UVector2(CEGUI::UDim(0.25f, 0), CEGUI::UDim(0.25f, 0)));
  //si->setPosition(CEGUI::UVector2(CEGUI::UDim(0.75f, 0), CEGUI::UDim(0, 0)));
  ////si->setProperty("Image", CEGUI::PropertyHelper::imageToString(&imageSet->getImage((CEGUI::utf8*)"RttImage")));
  //sheet->addChildWindow(si);
  //mSystem->setGUISheet(sheet);

  /*方法二:
  直接导入做好的layout文件,直接回去文件中的窗口"quit"和"Root/viewtu"(如图)
  之后再进行调用,方法二相对方法一灵活方便,推荐
  */

  //CEGUI::Window* sheet2 = CEGUI::WindowManager::getSingleton().loadWindowLayout((CEGUI::utf8*)"mylayout.layout");

  //CEGUI::Window * textureWindow=CEGUI::WindowManager::getSingletonPtr()->getWindow("Root/viewtu");

  //CEGUI::Window *quit = CEGUI::WindowManager::getSingletonPtr()->getWindow("quit");
  //quit->setText((CEGUI::utf8*)Ogre::UTFString(L"退出").asUTF8_c_str());
  //textureWindow->setProperty("Image", CEGUI::PropertyHelper::imageToString(&imageSet->getImage((CEGUI::utf8*)"RttImage")));
  //mSystem->setGUISheet(sheet2);

  //简化
  //将CEGUI::WindowManager::getSingleton()值存储于窗口管理变量wmgr便于书写
  CEGUI::WindowManager& wmgr = CEGUI::WindowManager::getSingleton();
  //mylayout.layout文件是用CELayoutEditor制作的
  //在原OGRESDK中的GUI只有TaharezLook的skin,而在CELayoutEditor还有Vanilla和WindowsLook
  //也就是说DEMO中的layout都是使用TaharezLook的skin,如果要用其他的skin,还要处理将相关联的文件
  //否则会出错


  CEGUI::Window* sheet2 = wmgr.loadWindowLayout((CEGUI::utf8*)"myoutlay.layout");

  CEGUI::Window * textureWindow=wmgr.getWindow("Root/viewtu");
  CEGUI::Window *quit = wmgr.getWindow("quit");
  quit->setText((CEGUI::utf8*)Ogre::UTFString(L"退出").asUTF8_c_str());
  //textureWindow->setProperty("Image", CEGUI::PropertyHelper::imageToString(&imageSet->getImage((CEGUI::utf8*)"RttImage")));
  mSystem->setGUISheet(sheet2);
  
  
    //响应“quit”按钮,放于侦听类中,"quit"名称要对应
  CEGUI::WindowManager *wmgr = CEGUI::WindowManager::getSingletonPtr();
  CEGUI::Window *quit = wmgr->getWindow((CEGUI::utf8*)"quit");
  quit->subscribeEvent(CEGUI::PushButton::EventClicked,
   CEGUI::Event::Subscriber(&MainFrameListener::quit, this));

抱歉!评论已关闭.