随笔 - 132  文章 - 51  trackbacks - 0
<2012年7月>
24252627282930
1234567
891011121314
15161718192021
22232425262728
2930311234

常用链接

留言簿(7)

随笔分类

随笔档案

文章分类

文章档案

cocos2d-x

OGRE

OPenGL

搜索

  •  

最新评论

阅读排行榜

评论排行榜

首先,在其官网下载windows版本的CEGUI-0.7.1.zip源码压缩包和vs编译用的依赖库CEGUI-DEPS-0.7.x-r1-vc71.zip(我的开发环境是vs2003,所以是vc71)。哎,干什么事情一定要细心,一不小心下了个CEGUI-DEPS-0.7.x-r1-vc9.zip ,结果编译的时候出现了莫名其妙的错误,更新成了VC71的就没问题了,可见欲速则不达的真理啊.....
下载网址:http://cegui.org.uk/api_reference/downloading.html

然后,解压CEGUI-0.7.1.zip,生成CEGUI-0.7.1文件夹,将CEGUI-DEPS-0.7.x-r1-vc71.zip解压产生的dependencies放入CEGUI-0.7.1目录中,在进入CEGUI-0.7.1\projects\premake目录,执行build_vs2003.bat批处理脚本,生成CEGUI.sln工程文件,就可以编译了,一般情况下编译非常顺利。

我遇到了点问题:运行的时候提醒我logo.png没有加载上,莫非工作目录不对? 去see see,所有例子的工作目录都为空,而资源文件夹datafiles路径是CEGUI-0.7.1\datafiles,
跟踪程序发现CEGuiD3D9BaseApplication的构造函数中调用了DefaultResourceProvider加载资源
void CEGuiBaseApplication::initialiseResourceGroupDirectories()
{
    
// initialise the required dirs for the DefaultResourceProvider
    CEGUI::DefaultResourceProvider* rp =
        static_cast
<CEGUI::DefaultResourceProvider*>
            (CEGUI::System::getSingleton().getResourceProvider());
    
    
const char* dataPathPrefix = getDataPathPrefix();
    
char resourcePath[PATH_MAX];

    
// for each resource type, set a resource group directory
    sprintf(resourcePath, "%s/%s", dataPathPrefix, "schemes/");
    rp
->setResourceGroupDirectory("schemes", resourcePath);
    sprintf(resourcePath, 
"%s/%s", dataPathPrefix, "imagesets/");
    rp
->setResourceGroupDirectory("imagesets", resourcePath);
    sprintf(resourcePath, 
"%s/%s", dataPathPrefix, "fonts/");
    rp
->setResourceGroupDirectory("fonts", resourcePath);
    sprintf(resourcePath, 
"%s/%s", dataPathPrefix, "layouts/");
    rp
->setResourceGroupDirectory("layouts", resourcePath);
    sprintf(resourcePath, 
"%s/%s", dataPathPrefix, "looknfeel/");
    rp
->setResourceGroupDirectory("looknfeels", resourcePath);
    sprintf(resourcePath, 
"%s/%s", dataPathPrefix, "lua_scripts/");
    rp
->setResourceGroupDirectory("lua_scripts", resourcePath);
    sprintf(resourcePath, 
"%s/%s", dataPathPrefix, "xml_schemas/");
    rp
->setResourceGroupDirectory("schemas", resourcePath);   
}
默认搜索的资源是../datafiles/schemes/ , ../datafiles/imagesets/, ../datafiles/fonts/, ........

以为着不用修改所有例子程序的工作目录,只需要将CEGUI-0.7.1\datafiles( 我这解压后就是这个路径 ),拷贝到CEGUI-0.7.1\projects\premake\Samples下就OK

但是执行的时候却遇到了问题,我运行所有的CEGUI Sample全部内存错误,后来我跟踪发现Window::setParent(Window* parent)函数有问题,在他的函数体内只保留d_parent = parent;transferChildSurfaces(); 这两行内容就可以了,再编译就一切正常了。 PS: 注释的函数不知道有没有潜在的错误

OK 编译正常,可以运行

参照Demo写一个简单的例子:
int main(int /*argc*/char* /*argv*/[])    
{
    TDemo demo;
    
return demo.run();
}


bool TDemo::initialiseSample()
{
    
using namespace CEGUI;

    WindowManager
& winMgr = WindowManager::getSingleton();

    SchemeManager::getSingleton().create( 
"WindowsLook.scheme" );

    
//Create cursor
    System::getSingleton().setDefaultMouseCursor("WindowsLook""MouseArrow" );

    
//Create font
    FontManager::getSingleton().create( "Girl.font" );
    
    
//Create root window
    DefaultWindow* root = (DefaultWindow*)winMgr.createWindow( "WindowsLook/StaticImage""RootWindow" );

    
//Set GUI root window
    System::getSingleton().setGUISheet( root );

    
//Create child window
    Window* st = winMgr.createWindow( "WindowsLook/StaticText""StaticText" );
    
    root
->addChildWindow( st );
    st
->setPosition( UVector2( cegui_reldim(0.45), cegui_reldim(0.23) ) );
    st
->setSize( UVector2( cegui_reldim(0.15), cegui_reldim(0.05) ) );
    st
->setText( "Hello world" );
    
return true;
}


void TDemo::cleanupSample()
{

}

go go go,虽然起步比较晚,但总比没有好,加油
posted on 2010-06-13 12:24 风轻云淡 阅读(1336) 评论(0)  编辑 收藏 引用 所属分类: OGRE

只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理