2011/04/06

MyGui實現動態載入,顯示描邊中文字

MyGui原本設定可以載入中文字,但是需要一次全部載入,會有一次全部載入過久的缺點。
於是我參考網路上MyGui3動態載入的文章,並參考TrueType2的範例(網路上有蠻多介紹這篇的文章)。

在實現功能時,example2的範例我算是全部搬入,只是套入MyGui的文字顯示介面。
實作上先宣告一個固定大小的材質,然後將字描繪在材質上,在取得字型時,取得字在材質上的範圍。
由於TrueType2的範例上,已經實作了直接描邊的文字,所以不需要在繪字時上下左右移動,中間再疊上一個字,這樣描出來的字邊不太好看,而且中間字的透明部份會壓在外框的字上,顯示不如直接用範例漂亮。


如果需要不描邊的中文字,網路上也可以找到相關的文章,使用上更是簡單,也有完整的範例。


下面的範例是使用微軟正黑體
image 
 使用方式:
(1)在MyGUI_Fonts.xml新增一個新的資源,我設定的如下

<Resource type="ResourceDynOLTrueTypeFont" name="OLMSJHFont.17">
    <Property key="Source" value="msjh.ttf"/>
    <Property key="Size" value="36"/>
    <Property key="Antialias" value="false"/>
    <Property key="SpaceWidth" value="4"/>
    <Property key="TabWidth" value="8"/>
    <Property key="CursorWidth" value="2"/>
    <Property key="Distance" value="6"/>
    <Property key="OffsetHeight" value="0"/>
    <Property key="OutlineColor" value="#000000"/>  <!-- 外框文字 -->
    <Property key="FontColor" value="#FFFFFF"/>     <!-- 文字顏色 –->
    <Property key="OutlineWidth" value="2"/>           <!-- 描邊的寬度 -->
</Resource>
(2)在MyGUI_FontManager.cpp註冊ResourceDynOLTrueTypeFont
FontManager::initialise()


(3)編輯介面時設定FontName為OLMSJHFont.17

已知問題:
程式實作時,當材質已滿時,會造成繪字無法顯示,目前並無實作這部份


分享我實作的程式,無詳細測試過是否有問題,歡迎下載指教: