CEGUI是一个开放源码的开发游戏界面的库,如果你在游戏里发现CEGUIBase_d.dll之类以CEGUI开头的DLL的话,这个游戏的界面就是CEGUI做的,游戏字幕的输出自然也是用它。 1 v- F: l- v" I. C+ L0 n
* K/ S6 U9 a$ [ A, m2 u6 xCEGUI有0.4.1,0.5.X,0.6.X等几个版本,从0.5.X开始就对中文完美支持了。
H# q( g$ Q3 I" b m0 h问题是0.4.1这个版本,对中文的支持不太完美,说是不能换页之类的。 9 P# b. ]3 U5 i5 t, Y. O' ^
现阶段,不少AVG游戏中还是用CEGUI0.4.1这个版本,比如安徒生童话这个AVG游戏.
w7 Y; g* k8 h7 c3 D0 U6 v2 k因为FONT字体定义文件的格式不同,所以可以判断出是0.4.1这个版本
* A* l5 p4 F( @2 }
: t9 `; T/ V$ j1 }: W0 {解决方法 8 c! Q, v9 y; S! W. {0 N/ S
关于解决方法,我查了不少资料,大致有2个
) n) j* U6 e( C0 n3 m+ d$ g1 l1。改造0.4.1的DLL文件,参照0.5.X的代码,把关键地方进行修改。
' v& V0 F& A' s6 r9 K( r 这个方法较难,暂不讨论。 . D! F/ k) [+ G
! i, J" p; N9 W7 r2。0.4.1的字体定义文件还是为中文留了一条路的。
0 y: Z1 x5 I w0 v& N. i+ m 可以用GlyphSet这个属性只生成要用到的字体的图片。
* Q% p, ?% g/ X) Z# v 中文汉字有6000多个,但是在一个AVG里用到的中文可能只有1000多个。 " i! F( M0 _7 A+ O) j9 T& y1 b
把这些中文汉字定义到GlyphSet这个属性,也许就能正常显示了。 7 {- x( S6 ]7 b3 H* ]1 \' f/ o
这个方法尚未做实际测试,效果未知。
" q1 C U& Q& V, r8 t+ f' c
) w" a1 A u. x. K, L相关资料 , T6 q7 ^" s) B
! C& A/ Q: {2 L. T$ s$ ~. K! SCEGUI0.4.1字体定义文件说明 ; U1 D8 D% H; P9 Q) ~0 x
http://www.cegui.org.uk/wiki/index.php/Font_files - A7 Q4 j$ }3 f0 s9 g) ^3 d0 k
4 ?' U* q7 _ z1 RCEGUI0.5.X关于字体定义文件的变更点
& l f4 \: N( k) a# m原文 * y# x8 R- `- T6 |
http://www.cegui.org.uk/wiki/index.php/Release_Notes_0.5.X
: W" v1 E( a- _) w) j0 r* n# t. ?
A FontDemo sample which shows several properties of the new Font class.
# G& C9 U: i8 B4 R \/ H9 |The above changes resulted in some slight changes to the format of the XML .font files:
3 n( U8 D; g/ Y2 M0 X2 \/ v6 \' f) a& x E* I. k+ f
GlyphSet, GlyphRange, Glyph sections of the Font are gone & t9 d1 J( Z' L, q0 A! @' ]2 k
The possible values of the Type attribute are now:
1 k! o) c! {0 z8 uFreeType (instead of Dynamic) ! A, z8 f ^( i2 g
Pixmap (instead of Static) # ~/ R0 }. k) i5 I. t
The FirstCodepoint and LastCodepoint attributes of the Font section were removed / `' W# h) J& h5 r# _4 ^! |9 Z7 O
After you change your .font files as mentioned above, they should work without problems. 2 `9 |/ o' C8 y4 O6 ?3 o. l
) d$ f1 q8 P6 f/ @% U4 K
下面这篇文章应该是针对CEGUI0.4.1这个版本来说的。
' x Q( n2 i8 b! w" J4 r# E5 e1 n; m5 Z
如何让CEGUI显示出中文 : A: U8 v0 ]+ a1 ` _
原文 9 k. K4 M, u) \
http://blog.csdn.net/khzide/archive/2005/09/07/473765.aspx
& B5 @- A! x2 X. _8 m) H5 x# ?, Z1 L* b; ]. A; }- [
CEGUI(Crazy Eddie's GUI System ) 是一个免费并开放源码的图形(GUI API库),写于C++, 并且面向对象。你可以用它来创建游戏中的GUI部分,而不用再自已动手去实现。
% r1 |, @" O. }5 s& a7 b" |0 z. \
V+ i. u c; Q管方网站:http://www.cegui.org.uk/ 上面有很多有用的信息,如果你要详细了解它的话,可以常去这上面逛逛。
3 g4 K5 r/ T& Y: T
5 x" w1 E9 L0 P5 B发现有好多战友与我一样,一开始用它的时候不知道如何显示出中文,只是听说很easy,但却自已试不出来。我走了一些弯路,希望别人不要再跟我一样了。其实它实现起来真是是很easy. CEGUI是基于utf8格式的,所以可以显示出中文,但需要注意的是这里面烦是设及到汉字的地方都要保存成(utf8)格式,或者在程序中动态转换成utf8字符串也行。至于如何保存在utf8格式,有很多哟,可以用EditPlus, uedit32, 更酷的一个就是vs.net了。哈哈,可惜它太大了,携带起来不方便。
8 t. ^5 x( X N7 U- j2 h! ^( Y6 u$ Y* M! B. }
1.你要指定一种中文字体文件(*.ttf) 例如我选用的simhei.ttf, 这可以在window目录中的font文件夹中找到一些。 这就是CEGUI中我们要用到的中文字体来源。 4 u1 f- `/ G7 M' D( F, a
( ?! \6 ~# C9 i$ v1 _3 }
2. 需要定义一个 (.font)文件, 这个文件其实是CEGUI用于生成字符映射图片的一个索引文件(xml格式),在<Font> 节下面定义一个子项<GlyphSet> 并指定其属生 Glyphs="所有需要用到的中文字符集" CEGUI会根据它而生成最终字符映射图片,如果你这里没有将用到的汉字全部列出,没关系,大不了就是CEGUI不会显示出你的字符或者显示成乱码^-^,系统不会崩的。
# h0 R" M; ~" `/ X( q% e, E
. [, n( { ~' f& k% U4 _3.字个(.font)文件一定要保存成(utf8)格式,这是很重要的哟。 ) C, ?+ A2 L( `" ]; a
$ h# h9 l0 z6 D1 V: J4 F
4.如果你的程序中用到了汉字,那么这个文件最好也要保存成(utf8)格式,当然你也可以去进行ascii<->utf8的转换,都一样的。
( [7 S* ]% Y+ _ v6 P+ E1 Q6 [3 p5 N' C: A2 [
9 o' W( N' Y3 l! G6 o. s. e* h" S这就完事了,怎么样,很简单吧。至于如何去载入字体文件,如何使用CEGUI,就不关吾的事了。相信你即然看了这遍文件,那些也一定会了吧。
# {5 e; q2 s! n; S) D
# M3 K5 C+ ]% \1 W
$ j- p- P5 {2 L3 y( ~
$ V5 o2 L3 N1 B y8 F
: c! S0 N a. }, A: M
- @6 ^; O' r7 Q1 h" i+ {
+ c3 K' q1 f7 D4 L) S# a7 r |