CEGUI是一个开放源码的开发游戏界面的库,如果你在游戏里发现CEGUIBase_d.dll之类以CEGUI开头的DLL的话,这个游戏的界面就是CEGUI做的,游戏字幕的输出自然也是用它。
( u. q0 @7 d: r: w) P' Q) t" M: }' Z( }. S6 E. G, V3 q5 T. }
CEGUI有0.4.1,0.5.X,0.6.X等几个版本,从0.5.X开始就对中文完美支持了。
* n( c1 H3 u8 a问题是0.4.1这个版本,对中文的支持不太完美,说是不能换页之类的。 $ Z" \! Y5 V2 |
现阶段,不少AVG游戏中还是用CEGUI0.4.1这个版本,比如安徒生童话这个AVG游戏.
6 u( U: O, F y! i7 ]" ?7 N因为FONT字体定义文件的格式不同,所以可以判断出是0.4.1这个版本 & R3 d k8 h i. K
$ J* v8 C" Z, L5 Q' A
解决方法
! H6 ?& v1 s: D+ Q# L* ]) |关于解决方法,我查了不少资料,大致有2个 , S3 b3 ~1 j7 ~
1。改造0.4.1的DLL文件,参照0.5.X的代码,把关键地方进行修改。 " B- Y; m* @( S: L2 U6 ?" t# `2 T
这个方法较难,暂不讨论。
' ~$ b+ c$ N: {, z! E# l' U O% c I$ L6 S8 S- p: g% q9 i; g
2。0.4.1的字体定义文件还是为中文留了一条路的。
+ D+ u1 K! i' e 可以用GlyphSet这个属性只生成要用到的字体的图片。
4 b, `0 F M5 Z& [- P2 Y8 ?9 F' x 中文汉字有6000多个,但是在一个AVG里用到的中文可能只有1000多个。
& u3 Q3 E7 g" A8 [6 T( m! ?8 l 把这些中文汉字定义到GlyphSet这个属性,也许就能正常显示了。 ' B" V* o! ^7 n' `7 \8 i
这个方法尚未做实际测试,效果未知。 : H$ ?- } u& X1 W+ P# k
- o& {) ]; s+ R+ Z6 g
相关资料
8 u# d6 H# ?) D5 x, F7 l
8 c% U, ^- v. D4 G/ qCEGUI0.4.1字体定义文件说明
( [. p! Q; a( c' Thttp://www.cegui.org.uk/wiki/index.php/Font_files 8 m! `# w7 k' i$ M0 ~( J6 [, b5 s
" K" I/ s8 C v1 e9 A
CEGUI0.5.X关于字体定义文件的变更点 : `+ _2 \8 p1 r
原文 - ^, _4 N% _& T# E, B3 Q1 s
http://www.cegui.org.uk/wiki/index.php/Release_Notes_0.5.X7 {* A6 C8 `2 p# L9 A6 |* z2 p
3 l+ `$ Y7 h. P! U5 l) a, r
A FontDemo sample which shows several properties of the new Font class. 1 H- s% x5 O5 r* g" G1 R
The above changes resulted in some slight changes to the format of the XML .font files: 6 ?2 {8 Z+ A" \
' J c9 {7 Z) N1 }3 u C/ e' @! rGlyphSet, GlyphRange, Glyph sections of the Font are gone
4 a, B! l& g1 V& E& v5 yThe possible values of the Type attribute are now: 3 G+ ]# J. z6 t; N y
FreeType (instead of Dynamic) ( P) k& y6 E2 E. e
Pixmap (instead of Static)
* s1 o) }, u6 H L' s0 i* bThe FirstCodepoint and LastCodepoint attributes of the Font section were removed
, t H/ N( E/ MAfter you change your .font files as mentioned above, they should work without problems. : I: b) N& W7 ?+ _
/ \9 _; {. O7 c5 n+ [2 w下面这篇文章应该是针对CEGUI0.4.1这个版本来说的。 / c( _/ y! d: u3 d1 j
. }6 h" _) r, _2 P7 V如何让CEGUI显示出中文 $ Y# N$ y4 W7 Q
原文
4 J4 U. t. g T8 uhttp://blog.csdn.net/khzide/archive/2005/09/07/473765.aspx 0 a# M" J2 ]' G+ @- L3 R2 A
d4 x% p& d' L7 }2 t4 yCEGUI(Crazy Eddie's GUI System ) 是一个免费并开放源码的图形(GUI API库),写于C++, 并且面向对象。你可以用它来创建游戏中的GUI部分,而不用再自已动手去实现。
! P" o( V( [, O; x
2 V& r+ @: V: q, t管方网站:http://www.cegui.org.uk/ 上面有很多有用的信息,如果你要详细了解它的话,可以常去这上面逛逛。 - p& u ^6 A$ Q
* H2 t$ P/ R5 @" \- |! ~
发现有好多战友与我一样,一开始用它的时候不知道如何显示出中文,只是听说很easy,但却自已试不出来。我走了一些弯路,希望别人不要再跟我一样了。其实它实现起来真是是很easy. CEGUI是基于utf8格式的,所以可以显示出中文,但需要注意的是这里面烦是设及到汉字的地方都要保存成(utf8)格式,或者在程序中动态转换成utf8字符串也行。至于如何保存在utf8格式,有很多哟,可以用EditPlus, uedit32, 更酷的一个就是vs.net了。哈哈,可惜它太大了,携带起来不方便。 $ @* f$ i. M6 a* @$ X6 \9 v8 |( k
7 d2 ]9 J& K- \7 Z0 b% I1 i1.你要指定一种中文字体文件(*.ttf) 例如我选用的simhei.ttf, 这可以在window目录中的font文件夹中找到一些。 这就是CEGUI中我们要用到的中文字体来源。 8 b. x& e! W9 i$ i' ~% w% {. q3 e- F1 w
/ B. B4 R3 E+ e8 _) W( ~) r4 y
2. 需要定义一个 (.font)文件, 这个文件其实是CEGUI用于生成字符映射图片的一个索引文件(xml格式),在<Font> 节下面定义一个子项<GlyphSet> 并指定其属生 Glyphs="所有需要用到的中文字符集" CEGUI会根据它而生成最终字符映射图片,如果你这里没有将用到的汉字全部列出,没关系,大不了就是CEGUI不会显示出你的字符或者显示成乱码^-^,系统不会崩的。 . A* N' v) Z" ?' z
- F O. ^/ h, j ~$ V
3.字个(.font)文件一定要保存成(utf8)格式,这是很重要的哟。 8 \ h$ A- {# q
. Q7 K5 q1 F2 u' t& z+ }4.如果你的程序中用到了汉字,那么这个文件最好也要保存成(utf8)格式,当然你也可以去进行ascii<->utf8的转换,都一样的。 + s8 F2 u6 P( H
8 [; b) q% Q4 R( D9 N8 e8 a" W T/ f$ ?2 Y( ~
这就完事了,怎么样,很简单吧。至于如何去载入字体文件,如何使用CEGUI,就不关吾的事了。相信你即然看了这遍文件,那些也一定会了吧。
' h4 I# k* {3 F9 G, W. r9 P* w5 r* t0 X) y
S$ R7 o, o4 s" l* R' u8 f9 D" D
9 l4 D! D* o' Y% y/ Y" O
4 E6 r; I6 L8 X5 r/ I. A1 W M3 E1 N& M# K9 e% w
% k( f3 N1 ?6 s# C, d4 ~ |