MyGUI 学习(1)

来源:互联网 发布:微信公众号支付java 编辑:程序博客网 时间:2024/04/29 16:06

第一个例子:

生成一个类继承自base::BaseDemoManager,同时在头文件中加入#include"Base/BaseDemoManager.h"

在cpp中加入宏MYGUI_APP(类名)

 

这个宏定义了相应的应用程序接口(win32 or console?)

 

实际调用的是int startApp()方法

 

startApp()里面主要进行窗口的创建(create)、渲染(run)、销毁(destroy)等工作

 

create方法,根据width、height(默认1024、768)创建窗口,调用的其实都是Win32的函数,createRender方法与创建OpenGL渲染窗口相似,关联设备上下文、图形上下文以及清除背景色和深度等。

 

createGui()方法,

  里面包括了下面语句

  mPlatform = newMyGUI::OpenGLPlatform();
  mPlatform->initialise(this);

  setupResources();

  mGUI = newMyGUI::Gui();
  mGUI->initialise(mResourceFileName);

粗略的看了下,OpenGLPlatform应该是提供了对OpenGL方面的管理,里面主要就是三个数据成员OpenGLRenderManager* mRenderManager;//大概应该是对OpenGL命令的封装
  OpenGLDataManager*mDataManager;//可能是提供对OpenGL渲染数据的管理吧,顶点数据或是顶点缓冲之类的、纹理图片(皮肤方面的)
  LogManager*mLogManager;//大概是输出错误日志之类的吧。

Gui类应该是提供了MyGUI方面的管理,里面的数据成员都是以某某Manager结尾,且提供了比较方便的创建Widget、销毁Widget、连接或断开Widget、查找Widget的方法

 

setupResources()方法是用来解析资源路径的,资源的根路径和路径存储于resources.xml(当前工作目录)中,可以用addResourceLocation添加。资源的皮肤配置文件名字在mResourceFileName(默认为MyGUI_Core.xml)中。

 

createGui()方法之后是createInput()方法,这应该是用于出来鼠标、键盘方面的接口吧

 

createPointerManager()鼠标管理器,可以有不同的鼠标效果,配置文件里貌似可以设置。

 

createScene()这方法里面什么都没有,自己实现的子类应该重写该方法来实现自己的界面

 

_windowResized()窗口改变时调用,里面主要完成投影矩阵设置、鼠标响应区域设置、以及mPlatform->getRenderManagerPtr()->setViewSize(width,height);这句完成的是更改MyGUI每层的大小(我猜要适应不同分辨率屏幕的话,估计得在这儿下手)

 

啊,终于囫囵吞枣把create()方法大概流程看完了,自己都还没怎么弄懂,可想而知,具体看每一句代码的难度了。

 

开始run()方法,看起来简单不少

首先就是Windows的取消息、传递消息,captureInput();为空,啥都没有,难道是为特殊输入设备留的接口?
  看来重点是drawOneFrame();方法了,最后又传递到了OpenGLRenderManager里的

drawOneFrame()方法了

  onFrameEvent((float)((double)(time)/ (double)1000));//这句应该是用与MyGUI方面的事件处理了,比如弄个动画之类的或许

onRenderToTarget(this, mUpdate);最后是由多态调用了下面这段

void RenderManager::onRenderToTarget(IRenderTarget* _target,bool _update)
 {
  LayerManager* layers =LayerManager::getInstancePtr();
  if (layers != nullptr)
   layers->renderToTarget(_target,_update);
 }

最后又是落到了LayerManager上,看来Layer是以后解读的重点了,我才Layer或许是一个批次渲染的意思。

 

最后是destroy();方法了,释放顺序和create创建的顺序相反。

 

重写createScene()方法

void TestKeeper::createScene()
{
 base::BaseDemoManager::createScene();

 MyGUI::Window* main_window =MyGUI::Gui::getInstance().createWidget(
  "WindowCSX",               
  MyGUI::IntCoord(100, 100, 800,600),
  MyGUI::Align::Default,         
  "Main"                    
  );
 main_window->setCaption("Frame");           
 main_window->setMinSize(300,400);           

 MyGUI::Button* button =main_window->createWidget(
  "Button",
  MyGUI::IntCoord(100, 100, 100,30),
  MyGUI::Align::Default
  );
 button->setCaption("Hello Button");

 MyGUI::ComboBox* cbb =main_window->createWidget(
  "ComboBox",
  MyGUI::IntCoord(200, 100, 100,30),
  MyGUI::Align::Default
  );
 cbb->_addItem(L"中国");
}

 

MyGUI <wbr>学习(1)

第一个例子告一段落

 

 

 

 

 

0 0
原创粉丝点击