首先,在其官網(wǎng)下載windows版本的CEGUI-0.7.1.zip源碼壓縮包和vs編譯用的依賴庫(kù)CEGUI-DEPS-0.7.x-r1-vc71.zip(我的開發(fā)環(huán)境是vs2003,所以是vc71)。哎,干什么事情一定要細(xì)心,一不小心下了個(gè)CEGUI-DEPS-0.7.x-r1-vc9.zip ,結(jié)果編譯的時(shí)候出現(xiàn)了莫名其妙的錯(cuò)誤,更新成了VC71的就沒(méi)問(wèn)題了,可見欲速則不達(dá)的真理啊.....
下載網(wǎng)址: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解壓產(chǎn)生的dependencies放入CEGUI-0.7.1目錄中,在進(jìn)入CEGUI-0.7.1\projects\premake目錄,執(zhí)行build_vs2003.bat批處理腳本,生成CEGUI.sln工程文件,就可以編譯了,一般情況下編譯非常順利。
我遇到了點(diǎn)問(wèn)題:運(yùn)行的時(shí)候提醒我logo.png沒(méi)有加載上,莫非工作目錄不對(duì)? 去see see,所有例子的工作目錄都為空,而資源文件夾datafiles路徑是CEGUI-0.7.1\datafiles,
跟蹤程序發(fā)現(xiàn)CEGuiD3D9BaseApplication的構(gòu)造函數(shù)中調(diào)用了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);
}
默認(rèn)搜索的資源是../datafiles/schemes/ , ../datafiles/imagesets/, ../datafiles/fonts/, ........
以為著不用修改所有例子程序的工作目錄,只需要將CEGUI-0.7.1\datafiles( 我這解壓后就是這個(gè)路徑 ),拷貝到CEGUI-0.7.1\projects\premake\Samples下就OK
但是執(zhí)行的時(shí)候卻遇到了問(wèn)題,我運(yùn)行所有的CEGUI Sample全部?jī)?nèi)存錯(cuò)誤,后來(lái)我跟蹤發(fā)現(xiàn)Window::setParent(Window* parent)函數(shù)有問(wèn)題,在他的函數(shù)體內(nèi)只保留d_parent = parent;transferChildSurfaces(); 這兩行內(nèi)容就可以了,再編譯就一切正常了。 PS: 注釋的函數(shù)不知道有沒(méi)有潛在的錯(cuò)誤
OK 編譯正常,可以運(yùn)行
參照Demo寫一個(gè)簡(jiǎn)單的例子:

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,雖然起步比較晚,但總比沒(méi)有好,加油
posted on 2010-06-13 12:24
風(fēng)輕云淡 閱讀(1379)
評(píng)論(0) 編輯 收藏 引用 所屬分類:
OGRE