From CEGUIWiki
1 概覽:資料檔案和ResourceProvider
1.1 資源的提供 – 什麼是ResourceProvider?
1.2 XML, XSD? 都是XML!
1.3 資料檔案
1.3.1 圖片集
1.3.2 字型
1.3.3 Scheme
1.3.4 布局
1.3.5 配置
2 裝載基本檔案
3 簡單的預設初始化
4 結論
1 概覽:資料檔案和ResourceProvider
CEGUI使用一些資料檔案的變體,這可能會導致一些混淆的發生。
因此首先介紹資料檔案是什麼,它們用來幹什麼,怎麼在CEGUI中裝載。
1.1 資源的提供 – 什麼是ResourceProvider?
CEGUI使用一個叫做ResourceProvider的協助對象。這個對象提供一個CEGUI核心庫和外部檔案裝載系統的介面。例如Ogre和Irrlicht引擎
使用他們自己的資源管理員、檔案裝載子系統:通過實現和提供一個專門化的ResourceProvider對象,這些引擎的渲染器實現了以上系統的“
無縫”整合,因此CEGUI資料檔案是通過這些系統裝載的。
Direct3D和OpenGL預設情況下沒有使用專門話的ResourceProvider,這些系統預設從應用程式的當前路徑裝載所有資源檔。因此這些文
件必須和同一個檔案夾相關,但是他們彼此毫無關係,這個很重要。
1.2 XML, XSD? 都是XML!
除了圖形檔案和可裝載模組檔案(.dll/.so等等),所有CEGUI使用的資料檔案都是XML。這兒出現了第一個障礙:如何使用schema(.xsd)文
件。
預設情況下,CEGUI使用Xerces-C++來處理帶有schema驗證的XML檔案。(關於XSD檔案的介紹略)。CEGUI有一些XSD在
cegui_mk2/XMLRefSchema/ 目錄下。必須記住的是xsd檔案是ResourceProvider系統所必須的,你可以在要裝載的xml檔案目錄下放置一個合適
的.xsd檔案。
1.3 資料檔案
資料檔案常常不是以.xml結尾的,儘管它們都是xml檔案。它們通常根據檔案內容定義,例如.imageset是Imageset的xml設定檔,.font
是字型的xml設定檔,等等。下面是對每種資料檔案的簡要介紹。
1.3.1 圖片集Imageset
Imageset只是原圖形/紋理檔案某個地區的定義(Imageset定義時將會指定地區)。每個定義的地區都有一個唯一的名字,並且在系統內被
認為是一個Image。Image是Imageset中一個基本的元素。如果想要更改CEGUI畫出的圖形,可以更改原圖形/紋理檔案,或者更改image的定義區
域。
1.3.2 字型
可以定義兩種類型的字型供CEGUI使用
動態字型 基於true-type(.ttf)的字型檔
靜態字型 一個位元影像字型,這種字型基於一個定義了Images的Imageset。
1.3.3 Scheme
Schema是把零碎的資料檔案組合起來的一種方法。 它也是裝載和註冊widget類型的最簡便的方法。一個Schema可以包含以下一個或者多個
類型的定義(這些檔案描述的資源可以在schema被裝載時裝載)。
Imageset
Font
Window Set
Window Alias
Imageset和font在前面已經提到過。一個Window Set指定了可裝載模組(.dll/.so, 等等)的名字。
Widgets集包含了你希望註冊的模組集。(注,根據網上的資料,widgets類似於windows的themes)
Window或者widget類型可以有多個名字,Windows Alias提供了這一機制。我們也可以通過這種機制使一個widget"隱藏"另一個已經註冊了
的widget。(有點象c++的隱藏?)
1.3.4 布局layout
布局檔案包含了一個視窗布局的資訊,它也是xml格式的。其中每個'window'元素定義了被建立的window或者widet,'Property'元素定義
每個window的屬性值。
1.3.5 配置
CEGUI支援設定檔。可以通過這個檔案設定一些預設值,例如使用哪個Scheme,哪個布局,哪個指令檔(在使用SriptMoudle時)等等
2 裝載基本檔案
要跑起一個CEGUI的樣本,至少必須有以下檔案。
Imageset
Font
Scheme
Scheme檔案的好處在於它可以用來自動裝載其他兩個資料檔案。在CEGUI的範例schemes中只有Imageset而沒有Font。下面我們來裝載一個scheme檔案和font檔案。如下:
// load in the scheme file, which auto-loads the TaharezLook imageset
CEGUI::SchemeManager::getSingleton().loadScheme(“../datafiles/schemes/TaharezLook.scheme”);
// load in a font. The first font loaded automatically becomes the default font.
CEGUI::FontManager::getSingleton().createFont(“../datafiles/fonts/Commonwealth-10.font”);
在上面的代碼中,我們假設'datafiles'目錄存在,並且位於目前的目錄的上層目錄中,其中包含了cegui_mk2/Samples/datafiles中的所有檔案。
Oger使用者注意:要使用沒有被編輯過的範例資料檔案,你必須確保當前工作目錄被oger資源管理員中設定為資源路徑(可以通過resources.cfg設定)。或者你可以添加所有資料檔案子目錄並且刪去資料檔案中的所有相對路徑資訊。這樣做是因為它們必須在預設的ResourceProvider下和D3D/OpenGL一起工作,就像前面討論的那樣。
3 簡單的預設初始化
最後,你需要設定一些預設值。這保證了在window或者widget中沒有指定特定的主題時系統總是可以有一個可用的字型和滑鼠圖示。
在現實中,我們沒有必要指定一個預設字型,因為FontManager總是會自動化佈建第一個裝載的字型為預設的。但如果這不是你要的預設字型,你可以再設定一個你想要的預設字型。設定預設字型的代碼如下:
System::getSingleton().setDefaultFont(“Commonwealth-10”);
另一個需要設定的預設對象就是滑鼠圖示了。在你沒有定義當滑鼠移到某個元素上的表徵圖時,滑鼠不會消失。設定預設滑鼠圖示的代碼如下:(使用上面和scheme一起裝載的TaharezLook imageset)
System::getSingleton().setDefaultMouseCursor(“TaharezLook”, “MouseArrow”);
4 結論
我們學習了一些基本資料檔案,它們怎麼裝載,CEGUI的需要的最小初始化資料檔案等等。其他文章會討論每種資料檔案的細節。
本文來源:http://blog.csdn.net/MikeFeng/archive/2006/11/03/1365241.aspx