CEGUI是一个开放源码的开发游戏界面的库,如果你在游戏里发现CEGUIBase_d.dll之类以CEGUI开头的DLL的话,这个游戏的界面就是CEGUI做的,游戏字幕的输出自然也是用它。
$ H' l4 c- m) B3 h8 ~+ D, A& _0 L+ y. L+ }
CEGUI有0.4.1,0.5.X,0.6.X等几个版本,从0.5.X开始就对中文完美支持了。 M! f5 G9 {5 P+ k9 t, R2 w
问题是0.4.1这个版本,对中文的支持不太完美,说是不能换页之类的。 + Q% k& N& K& x+ ?5 c% u: G
现阶段,不少AVG游戏中还是用CEGUI0.4.1这个版本,比如安徒生童话这个AVG游戏. , V5 V1 y" ~& [( r0 z
因为FONT字体定义文件的格式不同,所以可以判断出是0.4.1这个版本
% u: _& X: [1 d! }2 d+ H. F% k6 F
5 d0 X2 w( j% T# N! U: i- U解决方法 ; A$ B0 S: |+ }, _+ t# c0 @! ?
关于解决方法,我查了不少资料,大致有2个
d9 X9 d5 ?+ }/ I9 Q1。改造0.4.1的DLL文件,参照0.5.X的代码,把关键地方进行修改。 % t. P9 U$ }7 u) ~
这个方法较难,暂不讨论。
; o+ O/ Y5 [" `: I* G; c" t' P; W
# Y' J4 e) V. n% j1 x5 ?2。0.4.1的字体定义文件还是为中文留了一条路的。
1 ?) D7 L4 Z$ w% u 可以用GlyphSet这个属性只生成要用到的字体的图片。
+ G) L2 [, U. p3 Z 中文汉字有6000多个,但是在一个AVG里用到的中文可能只有1000多个。 5 E; J" I) `" ~# p2 U7 ^
把这些中文汉字定义到GlyphSet这个属性,也许就能正常显示了。 3 R( N$ I1 f$ l# x8 P% q
这个方法尚未做实际测试,效果未知。
& J% v5 s* h4 P% P/ v) k j% |+ A5 y( t/ ^& |' F2 E4 ?
相关资料
! ^+ L8 }, l5 n: m9 d2 F) ~/ j# |3 W8 e8 |' a Q1 L0 h3 r4 s& i2 F6 x% V: ]
CEGUI0.4.1字体定义文件说明
. y0 v" E% K& ]http://www.cegui.org.uk/wiki/index.php/Font_files i1 X' \2 S t3 l
- t" X/ ^# `0 y A. a* E' q' r
CEGUI0.5.X关于字体定义文件的变更点 ! E3 {. Q! I5 j' h+ P* q8 [- l
原文
5 o0 i- K/ s' q& x# B9 `8 ?http://www.cegui.org.uk/wiki/index.php/Release_Notes_0.5.X
6 J) k" I5 o, Q* j2 S5 g9 b+ N2 E: U( f m/ l. D# T3 s
A FontDemo sample which shows several properties of the new Font class.
( q# Y5 h& R) E2 ? I# dThe above changes resulted in some slight changes to the format of the XML .font files:
: w3 M" H& @ j" m
1 O$ m" f6 N5 r- p+ |GlyphSet, GlyphRange, Glyph sections of the Font are gone 7 L3 Q2 {; A3 e' e) z
The possible values of the Type attribute are now: ( O& T1 {3 Q8 v7 h
FreeType (instead of Dynamic) # m! W3 Z" z4 j8 C8 C) ~
Pixmap (instead of Static) ! I1 g1 j& }! t$ a, d! `0 N
The FirstCodepoint and LastCodepoint attributes of the Font section were removed
0 f1 G0 b6 C( ~After you change your .font files as mentioned above, they should work without problems. 5 Z, N/ n j1 e5 W
# H |3 C" B9 r- K* i! i0 y- M
下面这篇文章应该是针对CEGUI0.4.1这个版本来说的。
+ v. U+ i |9 _5 H5 N3 |! A6 c2 Y& z5 r: D; {; z2 C
如何让CEGUI显示出中文
4 }8 \: \0 \2 U' y原文 ' e$ M" u8 v' ~6 x
http://blog.csdn.net/khzide/archive/2005/09/07/473765.aspx " v h. d% d6 l( c
0 W! F! {/ b' [- uCEGUI(Crazy Eddie's GUI System ) 是一个免费并开放源码的图形(GUI API库),写于C++, 并且面向对象。你可以用它来创建游戏中的GUI部分,而不用再自已动手去实现。 * R/ T0 M7 j1 w+ s, L$ Z7 {
1 j, T3 p& q+ |9 j
管方网站:http://www.cegui.org.uk/ 上面有很多有用的信息,如果你要详细了解它的话,可以常去这上面逛逛。
9 C" b+ g( U- j+ E* ]* q- }+ b. Z. F3 F1 C
" Q1 a. r/ d& s7 l6 |发现有好多战友与我一样,一开始用它的时候不知道如何显示出中文,只是听说很easy,但却自已试不出来。我走了一些弯路,希望别人不要再跟我一样了。其实它实现起来真是是很easy. CEGUI是基于utf8格式的,所以可以显示出中文,但需要注意的是这里面烦是设及到汉字的地方都要保存成(utf8)格式,或者在程序中动态转换成utf8字符串也行。至于如何保存在utf8格式,有很多哟,可以用EditPlus, uedit32, 更酷的一个就是vs.net了。哈哈,可惜它太大了,携带起来不方便。 7 N) d& T4 e4 J: A+ A+ c1 f- p
' O; J9 s/ z! I' o- x1.你要指定一种中文字体文件(*.ttf) 例如我选用的simhei.ttf, 这可以在window目录中的font文件夹中找到一些。 这就是CEGUI中我们要用到的中文字体来源。
) [1 r" G8 s; n4 f5 p+ @: O9 P! M
( q. O# ]7 e2 B! E2. 需要定义一个 (.font)文件, 这个文件其实是CEGUI用于生成字符映射图片的一个索引文件(xml格式),在<Font> 节下面定义一个子项<GlyphSet> 并指定其属生 Glyphs="所有需要用到的中文字符集" CEGUI会根据它而生成最终字符映射图片,如果你这里没有将用到的汉字全部列出,没关系,大不了就是CEGUI不会显示出你的字符或者显示成乱码^-^,系统不会崩的。
. R8 [9 O0 V+ }" c/ [" H3 ^ O
6 E8 R" |: H& U6 O" F2 U3.字个(.font)文件一定要保存成(utf8)格式,这是很重要的哟。
$ o9 |# @2 s0 t- L [3 s: R* z3 a$ n F1 |0 O
4.如果你的程序中用到了汉字,那么这个文件最好也要保存成(utf8)格式,当然你也可以去进行ascii<->utf8的转换,都一样的。 - X3 Q2 C8 R/ h6 q9 ] q; m
( H, I. M# s Q7 Q) H; f/ f9 `" q
; A/ B4 p: _& @
这就完事了,怎么样,很简单吧。至于如何去载入字体文件,如何使用CEGUI,就不关吾的事了。相信你即然看了这遍文件,那些也一定会了吧。
1 `, E' t C- m6 z% Z7 k
+ \1 [" |" |4 N7 I4 T 2 W* s* X% \3 O, Y4 ]9 b
2 p8 k! _1 n- T# J1 R, P5 P
7 B- ?- O7 l2 g& k, L: b5 V
3 g2 m) g. b& {/ ^8 G
/ f1 j; e( Q8 X. C |