CEGUI是一个开放源码的开发游戏界面的库,如果你在游戏里发现CEGUIBase_d.dll之类以CEGUI开头的DLL的话,这个游戏的界面就是CEGUI做的,游戏字幕的输出自然也是用它。
/ W; _# |6 N/ b3 P5 f- |' |& H* X+ ~" ^$ a+ D( C% r) N
CEGUI有0.4.1,0.5.X,0.6.X等几个版本,从0.5.X开始就对中文完美支持了。
! {2 E$ q) W u: S4 Y问题是0.4.1这个版本,对中文的支持不太完美,说是不能换页之类的。 8 r) Q3 C' n e: H
现阶段,不少AVG游戏中还是用CEGUI0.4.1这个版本,比如安徒生童话这个AVG游戏. / d1 M9 L3 K% y- O
因为FONT字体定义文件的格式不同,所以可以判断出是0.4.1这个版本
1 B) z/ ]9 v1 I7 j8 |
: n1 N( A5 _/ d& g解决方法
5 l1 `9 P. f9 u* p4 g关于解决方法,我查了不少资料,大致有2个 5 E9 O6 f0 P# O1 j5 [8 {
1。改造0.4.1的DLL文件,参照0.5.X的代码,把关键地方进行修改。
9 |5 {& m" m2 n3 W; ^, F& l7 W 这个方法较难,暂不讨论。
9 }0 d4 x% ]: X1 o% G3 Q% ]; [$ `! |) Q t
2。0.4.1的字体定义文件还是为中文留了一条路的。 7 X: \( ?1 w' F
可以用GlyphSet这个属性只生成要用到的字体的图片。
0 ^: U# a% l1 I0 Q! m, e 中文汉字有6000多个,但是在一个AVG里用到的中文可能只有1000多个。 ) Q- ]0 W9 s; z, h: S' S- b
把这些中文汉字定义到GlyphSet这个属性,也许就能正常显示了。
" A* D$ u+ i' q7 t! f2 V 这个方法尚未做实际测试,效果未知。 4 c8 @$ [( G/ [3 K0 y: ~
5 {: x4 L7 I( }/ p: Y( L
相关资料 # o1 Z: f: h5 m; F/ t! C5 v9 ^
9 ~2 ]) z; N5 y0 p4 q% HCEGUI0.4.1字体定义文件说明 ' f) l: D3 i* `6 q1 z
http://www.cegui.org.uk/wiki/index.php/Font_files 4 W) {0 H4 [( j! ]
5 `5 U1 _( |7 o9 W
CEGUI0.5.X关于字体定义文件的变更点 8 V$ R/ [* {8 s2 S
原文 1 W' q \1 J7 Y' W" R. f( ]7 z
http://www.cegui.org.uk/wiki/index.php/Release_Notes_0.5.X' Y: u9 t% T1 b8 w$ s7 `' d- G4 b
! O! N2 E" X, [, }& g
A FontDemo sample which shows several properties of the new Font class.
6 {3 o1 s2 ?: ^, X( A" dThe above changes resulted in some slight changes to the format of the XML .font files: ! X; ^3 a5 X% z
/ h e) s* h% F+ s( u2 R* n6 Y3 i3 l
GlyphSet, GlyphRange, Glyph sections of the Font are gone " T: z! H" N* B
The possible values of the Type attribute are now: 1 z. ]3 ]; K! ~& H/ x: X0 O0 \
FreeType (instead of Dynamic) + Y3 l5 I$ W* Z6 z2 b1 a
Pixmap (instead of Static)
f/ l) \9 ?7 C! ^The FirstCodepoint and LastCodepoint attributes of the Font section were removed
- ?. O% B2 o0 {4 [1 yAfter you change your .font files as mentioned above, they should work without problems. , C$ k: f; N; G7 p
0 R2 K0 k$ k; S! I下面这篇文章应该是针对CEGUI0.4.1这个版本来说的。 ( d: L' h; o/ i$ \! e6 a# c) I
3 u- G7 N9 j6 ?' K9 q. h. q
如何让CEGUI显示出中文 ! [) O3 R4 b$ M
原文
! ?: P. n6 D# r" ehttp://blog.csdn.net/khzide/archive/2005/09/07/473765.aspx
" `0 ^. S4 k% k+ M4 L& a/ M- @
8 B- e# d+ `2 j7 e& TCEGUI(Crazy Eddie's GUI System ) 是一个免费并开放源码的图形(GUI API库),写于C++, 并且面向对象。你可以用它来创建游戏中的GUI部分,而不用再自已动手去实现。
: e& ^; @3 a8 X' B# \% I+ _3 q; z+ {; k' v+ R a7 Q7 C) G
管方网站:http://www.cegui.org.uk/ 上面有很多有用的信息,如果你要详细了解它的话,可以常去这上面逛逛。 ' B" r4 w# y) J& Y; L. p1 u
2 h! W7 G3 A: V: m: s9 R
发现有好多战友与我一样,一开始用它的时候不知道如何显示出中文,只是听说很easy,但却自已试不出来。我走了一些弯路,希望别人不要再跟我一样了。其实它实现起来真是是很easy. CEGUI是基于utf8格式的,所以可以显示出中文,但需要注意的是这里面烦是设及到汉字的地方都要保存成(utf8)格式,或者在程序中动态转换成utf8字符串也行。至于如何保存在utf8格式,有很多哟,可以用EditPlus, uedit32, 更酷的一个就是vs.net了。哈哈,可惜它太大了,携带起来不方便。
2 h7 v" f$ i! w+ y1 ~9 E
/ ~1 F: j* v7 K7 a9 ?1.你要指定一种中文字体文件(*.ttf) 例如我选用的simhei.ttf, 这可以在window目录中的font文件夹中找到一些。 这就是CEGUI中我们要用到的中文字体来源。
! C7 i( ~- S" D) z& l3 ]+ `( k% J3 m2 @
2. 需要定义一个 (.font)文件, 这个文件其实是CEGUI用于生成字符映射图片的一个索引文件(xml格式),在<Font> 节下面定义一个子项<GlyphSet> 并指定其属生 Glyphs="所有需要用到的中文字符集" CEGUI会根据它而生成最终字符映射图片,如果你这里没有将用到的汉字全部列出,没关系,大不了就是CEGUI不会显示出你的字符或者显示成乱码^-^,系统不会崩的。 . A" G# W! T; Y1 m
& a, n1 b, M9 y! E1 Q u3.字个(.font)文件一定要保存成(utf8)格式,这是很重要的哟。
" H+ ~) j- e y7 N
( X! Q" C9 y# y! {$ t4.如果你的程序中用到了汉字,那么这个文件最好也要保存成(utf8)格式,当然你也可以去进行ascii<->utf8的转换,都一样的。 & n4 h3 A- A0 L8 V- S6 f
; p9 B' E+ {6 v3 I% ^' P% n' v' Z, U' j
. L7 v, V2 }) ]- b) V% u7 z6 y6 K: f! B U; d这就完事了,怎么样,很简单吧。至于如何去载入字体文件,如何使用CEGUI,就不关吾的事了。相信你即然看了这遍文件,那些也一定会了吧。
4 R4 G5 |( @2 j$ D4 J O3 D( t' I
$ {! I7 L5 ?0 a) J; o + C1 y! P. w! A: B. t
$ c& o: i0 [1 |/ u/ h9 `
! \2 W8 `3 C' }1 x% S4 Y: l
" K1 U3 p! a3 u& K x. E8 W
& s( q% ]7 n/ t+ h) {( k6 u |