CEGUI是一个开放源码的开发游戏界面的库,如果你在游戏里发现CEGUIBase_d.dll之类以CEGUI开头的DLL的话,这个游戏的界面就是CEGUI做的,游戏字幕的输出自然也是用它。 2 \! l% `3 B* y% D; ~5 q
- r5 V! ?* ?& ~! zCEGUI有0.4.1,0.5.X,0.6.X等几个版本,从0.5.X开始就对中文完美支持了。 ; H$ X- @/ T" ^3 j6 A2 v
问题是0.4.1这个版本,对中文的支持不太完美,说是不能换页之类的。
" a/ W E- m; f2 q, e3 i现阶段,不少AVG游戏中还是用CEGUI0.4.1这个版本,比如安徒生童话这个AVG游戏. 2 \, g Q$ }8 n. g8 y0 i0 J0 {/ r
因为FONT字体定义文件的格式不同,所以可以判断出是0.4.1这个版本 6 w; v# u" d8 ^5 @
& L' v$ B3 c8 e* i+ s3 t解决方法 ( m7 g) o* z1 R0 P/ t6 m8 U
关于解决方法,我查了不少资料,大致有2个
) k `0 e2 \0 A6 V7 y# v1。改造0.4.1的DLL文件,参照0.5.X的代码,把关键地方进行修改。 ( C! J9 h$ r' A4 e5 u3 ^! a
这个方法较难,暂不讨论。
# b; O4 J r: n& y5 j
* D9 U9 m9 r. V9 { `% C2。0.4.1的字体定义文件还是为中文留了一条路的。
$ @+ W' e, `4 p: [ 可以用GlyphSet这个属性只生成要用到的字体的图片。
3 ~+ N- i6 ?% C# \# C 中文汉字有6000多个,但是在一个AVG里用到的中文可能只有1000多个。 1 @/ G4 s2 k- \! w- R; `
把这些中文汉字定义到GlyphSet这个属性,也许就能正常显示了。 J/ t: D: O3 c4 U& p
这个方法尚未做实际测试,效果未知。
+ @& t: j% h5 F4 `6 {8 C) V/ R7 j) m9 a3 G# c& A8 Q; ^
相关资料 - N4 }# L" y) o# x" R
+ L. a% S' k/ Q# pCEGUI0.4.1字体定义文件说明 4 U/ [: r9 u9 ?7 E# H7 [/ q
http://www.cegui.org.uk/wiki/index.php/Font_files 6 k) y0 S2 O5 Y- |# T. N" P
! }1 i" y' I0 |5 w6 {4 w' j6 QCEGUI0.5.X关于字体定义文件的变更点
! D' Z& _$ A- u$ t原文 . z6 @5 \9 ]' M# Z: q+ S
http://www.cegui.org.uk/wiki/index.php/Release_Notes_0.5.X$ Q1 y. v& f" b- w& G# F& \% v
! _5 G$ p- I2 B( G" t9 Z
A FontDemo sample which shows several properties of the new Font class.
3 K# L7 ~* W- V; o) g% nThe above changes resulted in some slight changes to the format of the XML .font files:
, ~" ?# [+ Y. z0 w. z
9 o8 j8 B) H: q3 J! jGlyphSet, GlyphRange, Glyph sections of the Font are gone
' s2 m% H I1 {$ F5 S: d2 t, P" NThe possible values of the Type attribute are now: 0 G: }+ [" ^& d0 s+ K0 f d9 ~
FreeType (instead of Dynamic) 7 O& |3 ^" x1 Y& |9 }
Pixmap (instead of Static) & r/ b; Z0 d6 {" w6 B3 `& i- Y, f+ ^
The FirstCodepoint and LastCodepoint attributes of the Font section were removed
9 t+ S6 f: m! t- }, }& l+ SAfter you change your .font files as mentioned above, they should work without problems.
; P1 c& a3 z1 J* B$ Z# M1 v' Q! {
" K& n* V6 N% N: x- J下面这篇文章应该是针对CEGUI0.4.1这个版本来说的。 9 l, a$ E, V" e
9 e. Y" G0 n. Z- V; v4 F |如何让CEGUI显示出中文
* f6 m z- e5 a( M: f8 w: `4 V原文 ' y+ q( v- ?! a/ F
http://blog.csdn.net/khzide/archive/2005/09/07/473765.aspx
: x, @/ O. J& x9 ~+ L
: P: V7 |, i* N: RCEGUI(Crazy Eddie's GUI System ) 是一个免费并开放源码的图形(GUI API库),写于C++, 并且面向对象。你可以用它来创建游戏中的GUI部分,而不用再自已动手去实现。 * Z2 m4 n% S+ t; g, p- o% L# D; _
& |, X! M1 Z% D8 X管方网站:http://www.cegui.org.uk/ 上面有很多有用的信息,如果你要详细了解它的话,可以常去这上面逛逛。
& H) H0 }6 t) V5 A5 Q+ J. N# z6 Y7 p! z% q! Z8 r9 R
发现有好多战友与我一样,一开始用它的时候不知道如何显示出中文,只是听说很easy,但却自已试不出来。我走了一些弯路,希望别人不要再跟我一样了。其实它实现起来真是是很easy. CEGUI是基于utf8格式的,所以可以显示出中文,但需要注意的是这里面烦是设及到汉字的地方都要保存成(utf8)格式,或者在程序中动态转换成utf8字符串也行。至于如何保存在utf8格式,有很多哟,可以用EditPlus, uedit32, 更酷的一个就是vs.net了。哈哈,可惜它太大了,携带起来不方便。
F( @# T$ y/ z' {1 H
) H) t0 m# `) U# j8 k5 ^1.你要指定一种中文字体文件(*.ttf) 例如我选用的simhei.ttf, 这可以在window目录中的font文件夹中找到一些。 这就是CEGUI中我们要用到的中文字体来源。 $ O) A' T+ t. A) C9 q8 @* F, q
, s! t3 J$ M" d- x, M+ i2. 需要定义一个 (.font)文件, 这个文件其实是CEGUI用于生成字符映射图片的一个索引文件(xml格式),在<Font> 节下面定义一个子项<GlyphSet> 并指定其属生 Glyphs="所有需要用到的中文字符集" CEGUI会根据它而生成最终字符映射图片,如果你这里没有将用到的汉字全部列出,没关系,大不了就是CEGUI不会显示出你的字符或者显示成乱码^-^,系统不会崩的。
6 e& I. h) W( E
r& s" p: n* m( S3.字个(.font)文件一定要保存成(utf8)格式,这是很重要的哟。
5 Y0 t+ ?( \5 z/ _& q, x. v' M1 i# C
4.如果你的程序中用到了汉字,那么这个文件最好也要保存成(utf8)格式,当然你也可以去进行ascii<->utf8的转换,都一样的。 8 q, C" G1 e* ^, e/ k7 l# u% r
7 Y8 W+ d3 i3 I, j
4 W K) c8 r! c
这就完事了,怎么样,很简单吧。至于如何去载入字体文件,如何使用CEGUI,就不关吾的事了。相信你即然看了这遍文件,那些也一定会了吧。 , }: f, K. j+ i! ]: J7 X* A0 X4 M1 Y
" |1 h( ]9 [( M/ O! G7 d
! c/ |$ r- o4 S7 R( c, u
, S; F$ I5 ]; g% A2 a: `
1 u5 L8 d, T8 C# Y9 j, @ w6 `
4 R+ n- I+ s( S5 ?. E- K6 ?
8 O3 m9 D5 L+ k: J |