天天看点

你的第一个CEGUI程序

你的第一个CEGUI程序 强烈建议仔细研究CEGUISample程序!因为那里介绍了它的一些基本用法,其实最后在游戏当中出现的,也就是这些例子的变化而已。 这里我会引导你写一个第一个自己的简单的CEGUI程序,它使用CEGUISampleHelper提供的框架,使用OpenGL渲染。 这是在CEGUI自己给的Sample程序基础上简化、简化、再简化得出的,目的是让大家对CEGUI程序有一个简单明了的认识,其实就是这么简单。里面只定义了一个背景,一个静态文本,写着“Hello!CEGUI”。 具体的,有几块重要的东西。有一些包含在框架里了,如下: DefaultResourceProvider,这个是CEGUI的一个全局的东西,可以在任何地方操作它的指针,但是一般只需要在一开始操作它。 在CEGuiOpenGLBaseApplication当中,你可以看见下面这样的代码,这就是在使用DefaultResourceProvider的指针在设置资源的路径,你可以毫不客气地复制粘贴到你的工程里

你的第一个CEGUI程序

 CEGUI::DefaultResourceProvider *  rp  =  static_cast < CEGUI::DefaultResourceProvider *>

你的第一个CEGUI程序

        (CEGUI::System::getSingleton().getResourceProvider());

你的第一个CEGUI程序
你的第一个CEGUI程序

    rp -> setResourceGroupDirectory( " schemes " ,  " ../datafiles/schemes/ " );

你的第一个CEGUI程序

    rp -> setResourceGroupDirectory( " imagesets " ,  " ../datafiles/imagesets/ " );

你的第一个CEGUI程序

    rp -> setResourceGroupDirectory( " fonts " ,  " ../datafiles/fonts/ " );

你的第一个CEGUI程序

    rp -> setResourceGroupDirectory( " layouts " ,  " ../datafiles/layouts/ " );

你的第一个CEGUI程序

    rp -> setResourceGroupDirectory( " looknfeels " ,  " ../datafiles/looknfeel/ " );

你的第一个CEGUI程序

    rp -> setResourceGroupDirectory( " lua_scripts " ,  " ../datafiles/lua_scripts/ " ); 下面是整个的代码:

你的第一个CEGUI程序

#ifndef _TDemo0_h_

你的第一个CEGUI程序

#define  _TDemo0_h_

你的第一个CEGUI程序
你的第一个CEGUI程序

#include  " CEGuiSample.h "

你的第一个CEGUI程序

#include  " CEGUI.h "

你的第一个CEGUI程序
你的第一个CEGUI程序

//  例子类

你的第一个CEGUI程序

class  TDemo0Sample :  public  CEGuiSample

你的第一个CEGUI程序
你的第一个CEGUI程序

... {

你的第一个CEGUI程序

public:

你的第一个CEGUI程序

    // 用于实现初始化的方法

你的第一个CEGUI程序

    bool initialiseSample();

你的第一个CEGUI程序
你的第一个CEGUI程序

    // 关闭

你的第一个CEGUI程序

    void cleanupSample(void);   

你的第一个CEGUI程序

} ;

你的第一个CEGUI程序

#endif   // _TDemo0_h_

你的第一个CEGUI程序
你的第一个CEGUI程序

#include  " TDemo0.h "

你的第一个CEGUI程序

#include  " CEGUI.h "

你的第一个CEGUI程序

#include  " CEGuiBaseApplication.h "

你的第一个CEGUI程序

#include  < cstdlib >

你的第一个CEGUI程序
你的第一个CEGUI程序
你的第一个CEGUI程序
你的第一个CEGUI程序

int  main( int  argc,  char   * argv[])

你的第一个CEGUI程序
你的第一个CEGUI程序

... {

你的第一个CEGUI程序

    TDemo0Sample app;

你的第一个CEGUI程序

    return app.run();

你的第一个CEGUI程序

}

你的第一个CEGUI程序
你的第一个CEGUI程序
你的第一个CEGUI程序
你的第一个CEGUI程序

bool  TDemo0Sample::initialiseSample()

你的第一个CEGUI程序
你的第一个CEGUI程序

... {

你的第一个CEGUI程序

    using namespace CEGUI;

你的第一个CEGUI程序
你的第一个CEGUI程序

    // 得到窗口管理器

你的第一个CEGUI程序

    WindowManager& winMgr = WindowManager::getSingleton();

你的第一个CEGUI程序

    // 装载资源,只说一下scheme就行,其它的system自己去调

你的第一个CEGUI程序

    SchemeManager::getSingleton().loadScheme("TaharezLook.scheme");

你的第一个CEGUI程序

    // 鼠标指针很特殊,但是其实是一样的用法

你的第一个CEGUI程序

    System::getSingleton().setDefaultMouseCursor("TaharezLook", "MouseArrow");

你的第一个CEGUI程序

    // 字体

你的第一个CEGUI程序

    FontManager::getSingleton().createFont("Commonwealth-10.font");

你的第一个CEGUI程序
你的第一个CEGUI程序

    // 这里创建了一个window。第一个参数指定了这个window的类型,第二个参数是名字。

你的第一个CEGUI程序

    Window* background = winMgr.createWindow("TaharezLook/StaticImage", "background_wnd");

你的第一个CEGUI程序
你的第一个CEGUI程序

    // 设置位置和大小

你的第一个CEGUI程序

    background->setPosition(UVector2(cegui_reldim(0), cegui_reldim( 0)));

你的第一个CEGUI程序

    background->setSize(UVector2(cegui_reldim(1), cegui_reldim( 1)));

你的第一个CEGUI程序
你的第一个CEGUI程序

    // 这就要把刚才那个background用作最底层的窗口了

你的第一个CEGUI程序

    System::getSingleton().setGUISheet(background);

你的第一个CEGUI程序
你的第一个CEGUI程序

    // 其实这个在这里没啥用,我认为,只是多了一层窗口。在任何UI系统当中所有的窗口都是一样的。

你的第一个CEGUI程序

    Window* sheet = winMgr.createWindow("DefaultWindow", "root_wnd");

你的第一个CEGUI程序
你的第一个CEGUI程序

    // 叠加上

你的第一个CEGUI程序

    background->addChildWindow(sheet);

你的第一个CEGUI程序
你的第一个CEGUI程序

    // 又创建了一个窗口,这回是一个静态的文本

你的第一个CEGUI程序

    Window* st = winMgr.createWindow("TaharezLook/StaticText", "TextWindow/Static");

你的第一个CEGUI程序

    sheet->addChildWindow(st);

你的第一个CEGUI程序

    st->setPosition(UVector2(cegui_reldim(0.45f), cegui_reldim( 0.23f)));

你的第一个CEGUI程序

    st->setSize(UVector2(cegui_reldim(0.15f), cegui_reldim( 0.05f)));

你的第一个CEGUI程序

    st->setText("Hello!CEGUI");

你的第一个CEGUI程序
你的第一个CEGUI程序

    return true;

你的第一个CEGUI程序

}

你的第一个CEGUI程序
你的第一个CEGUI程序
你的第一个CEGUI程序
你的第一个CEGUI程序

void  TDemo0Sample::cleanupSample()

你的第一个CEGUI程序
你的第一个CEGUI程序

... {

你的第一个CEGUI程序

    // 啥事也不做

你的第一个CEGUI程序

}

你的第一个CEGUI程序

好了,现在可以新建一个工程,模仿其它例子的工程结构,然后用这个代码,编译,就OK了。 这就是(或者几乎是一个)最简单的CEGUI程序,其实就是这么简单。

继续阅读