CEGUI是一个开放源码的开发游戏界面的库,如果你在游戏里发现CEGUIBase_d.dll之类以CEGUI开头的DLL的话,这个游戏的界面就是CEGUI做的,游戏字幕的输出自然也是用它。
% V& E# T1 x- j0 y$ T+ t! `* j9 b0 x8 c( H& q& T6 Y6 f% ^+ O2 w
CEGUI有0.4.1,0.5.X,0.6.X等几个版本,从0.5.X开始就对中文完美支持了。
, V. S$ d# k" C5 F3 o, Y问题是0.4.1这个版本,对中文的支持不太完美,说是不能换页之类的。
9 H8 Q$ p" V1 Z4 j& |, Z; P现阶段,不少AVG游戏中还是用CEGUI0.4.1这个版本,比如安徒生童话这个AVG游戏.
# Q/ S! k4 R( w5 Y. Z& J因为FONT字体定义文件的格式不同,所以可以判断出是0.4.1这个版本 ; {& H5 J1 q* M, \* y- U0 }, K6 z
. m0 {# j! M2 n0 l. O/ W- W
解决方法
. K; f# r+ x8 ]0 G9 F8 q关于解决方法,我查了不少资料,大致有2个
1 e& S6 {* V. M$ W1 v+ v0 b1。改造0.4.1的DLL文件,参照0.5.X的代码,把关键地方进行修改。
* d$ F3 L3 J1 S! ]! Y. @ 这个方法较难,暂不讨论。 3 b) X5 G) x: Q- b! a
' `- W. `8 A; x# Y5 @' F
2。0.4.1的字体定义文件还是为中文留了一条路的。 9 _; {. i8 @( I: Y5 O' V
可以用GlyphSet这个属性只生成要用到的字体的图片。 & ]% D9 m, p- N! @- B# U6 C. F+ ~
中文汉字有6000多个,但是在一个AVG里用到的中文可能只有1000多个。 ) B+ w1 X) I( F' l3 w7 T0 H( L
把这些中文汉字定义到GlyphSet这个属性,也许就能正常显示了。
% p* o0 C' T* I5 e 这个方法尚未做实际测试,效果未知。 ) `9 z+ |% {5 U) ?
: q0 N4 c! n0 H* {" b相关资料
$ S9 g" u* c% o' }9 P5 A" [5 \& ], M. p# o+ h K
CEGUI0.4.1字体定义文件说明
# d4 }; m, I$ Y0 S5 R Khttp://www.cegui.org.uk/wiki/index.php/Font_files 6 G6 c. \1 g* l9 J
X. y" D( B8 R! S f4 L% x
CEGUI0.5.X关于字体定义文件的变更点 ! |4 B, @' o# A! p9 w L$ s% Y
原文
% S: _1 H9 k% Z$ ?2 G% Ghttp://www.cegui.org.uk/wiki/index.php/Release_Notes_0.5.X
2 d- `( `8 e$ X6 B) b7 A' K5 F7 z8 z; m' r8 k# b* p; t
A FontDemo sample which shows several properties of the new Font class. 5 \) D y! W# |- l6 z; F
The above changes resulted in some slight changes to the format of the XML .font files:
5 Y+ c: K" ]2 p7 R& M' O' Z7 E
- h' D- M( Y2 P; i6 OGlyphSet, GlyphRange, Glyph sections of the Font are gone + [$ _5 s* l. `& @9 P& r/ o
The possible values of the Type attribute are now: 2 M4 d/ w+ j1 V! j& I
FreeType (instead of Dynamic) ' \- p* F& }+ G9 R2 h: {2 u& a b
Pixmap (instead of Static) , D( K( M2 {4 {
The FirstCodepoint and LastCodepoint attributes of the Font section were removed
% b/ g( |) x, E* m' |5 L( UAfter you change your .font files as mentioned above, they should work without problems.
: S( G& E# Z; \1 j4 S6 F$ A" M( i; } , K7 E: _. p/ w3 `
下面这篇文章应该是针对CEGUI0.4.1这个版本来说的。
) m( u3 M/ t$ X9 q4 O7 i; V- T( m9 m/ g4 E m5 w/ ~4 `" T
如何让CEGUI显示出中文
" H6 V. T% ]6 _6 c0 p O原文 2 }9 O' u/ v( \2 H2 Z
http://blog.csdn.net/khzide/archive/2005/09/07/473765.aspx
/ r% }$ K( @1 e! s3 o0 C9 b$ g) O4 B5 B! E3 [3 E# q
CEGUI(Crazy Eddie's GUI System ) 是一个免费并开放源码的图形(GUI API库),写于C++, 并且面向对象。你可以用它来创建游戏中的GUI部分,而不用再自已动手去实现。 * n/ O3 X6 |9 {, U7 |& Q. `, ?
- C8 I! S7 e, o- o# j* v' `, j
管方网站:http://www.cegui.org.uk/ 上面有很多有用的信息,如果你要详细了解它的话,可以常去这上面逛逛。
) y% N, q/ Z3 |: h& S: z
5 y6 ~$ m& z% v8 J4 c; Q; E发现有好多战友与我一样,一开始用它的时候不知道如何显示出中文,只是听说很easy,但却自已试不出来。我走了一些弯路,希望别人不要再跟我一样了。其实它实现起来真是是很easy. CEGUI是基于utf8格式的,所以可以显示出中文,但需要注意的是这里面烦是设及到汉字的地方都要保存成(utf8)格式,或者在程序中动态转换成utf8字符串也行。至于如何保存在utf8格式,有很多哟,可以用EditPlus, uedit32, 更酷的一个就是vs.net了。哈哈,可惜它太大了,携带起来不方便。 + }. @% j% v& x# i3 F' S
8 Q; Q! u- G7 ^! w* F, \
1.你要指定一种中文字体文件(*.ttf) 例如我选用的simhei.ttf, 这可以在window目录中的font文件夹中找到一些。 这就是CEGUI中我们要用到的中文字体来源。
3 X% s7 S T. o, m; f+ W: } S, v
2. 需要定义一个 (.font)文件, 这个文件其实是CEGUI用于生成字符映射图片的一个索引文件(xml格式),在<Font> 节下面定义一个子项<GlyphSet> 并指定其属生 Glyphs="所有需要用到的中文字符集" CEGUI会根据它而生成最终字符映射图片,如果你这里没有将用到的汉字全部列出,没关系,大不了就是CEGUI不会显示出你的字符或者显示成乱码^-^,系统不会崩的。
! s8 ~, N" ~! t8 U5 u( X/ d; u; C6 \: p8 o+ \6 u
3.字个(.font)文件一定要保存成(utf8)格式,这是很重要的哟。
( \/ u; c. e4 R) c& \2 G( g5 u
" [0 M# r* d8 N+ o, v4.如果你的程序中用到了汉字,那么这个文件最好也要保存成(utf8)格式,当然你也可以去进行ascii<->utf8的转换,都一样的。 $ M0 f3 {" ^0 P) t4 M- G
' ]. [' C/ d' H$ g- n$ P
6 l- k: M. k, }. Z+ D- @# B这就完事了,怎么样,很简单吧。至于如何去载入字体文件,如何使用CEGUI,就不关吾的事了。相信你即然看了这遍文件,那些也一定会了吧。
! m& S* \ |, F `* f# Q2 S# }2 p! W3 w& I4 g
8 I) [) |" Q& S9 k# t: R2 L
( P6 G- b2 p" p! h" p% j4 U% M1 }
& ^6 u' v% i! O& N" \: y9 t" W4 N$ j: [6 {9 R& @6 w. }
( p. k# }* S E* }. S+ a: M |