CEGUI是一个开放源码的开发游戏界面的库,如果你在游戏里发现CEGUIBase_d.dll之类以CEGUI开头的DLL的话,这个游戏的界面就是CEGUI做的,游戏字幕的输出自然也是用它。
7 |' S. L4 v9 L7 V% c" g' R
4 _2 p* p" L, U, GCEGUI有0.4.1,0.5.X,0.6.X等几个版本,从0.5.X开始就对中文完美支持了。
/ U: a; ~3 @2 w1 D8 s! [问题是0.4.1这个版本,对中文的支持不太完美,说是不能换页之类的。
/ h% G5 t1 F; z2 b3 r现阶段,不少AVG游戏中还是用CEGUI0.4.1这个版本,比如安徒生童话这个AVG游戏. 8 |7 w: a4 o) H3 B
因为FONT字体定义文件的格式不同,所以可以判断出是0.4.1这个版本 ) x, S: A/ I& I5 A/ M' V
( u" a' k7 U0 r7 s解决方法
+ G7 N, B( Y; V) t/ v( |关于解决方法,我查了不少资料,大致有2个
4 l. O* r8 J# O; U0 ^/ i5 A3 ]3 w1。改造0.4.1的DLL文件,参照0.5.X的代码,把关键地方进行修改。
( O* M. W. J( z' ~# Z 这个方法较难,暂不讨论。 ' e* x' g% U" Z3 r8 F' R
: \5 `1 d: ^4 g$ t2 M6 M2。0.4.1的字体定义文件还是为中文留了一条路的。 + @4 |% c5 R: _; A( |* s5 u
可以用GlyphSet这个属性只生成要用到的字体的图片。 , ~& o5 v0 _! Q- K3 A
中文汉字有6000多个,但是在一个AVG里用到的中文可能只有1000多个。 & t' \! a: F, F0 Q3 T% U
把这些中文汉字定义到GlyphSet这个属性,也许就能正常显示了。 7 u% _3 B& s8 M8 X1 D$ S
这个方法尚未做实际测试,效果未知。 ! V9 o* a7 E9 g9 n
- e9 b: E, A3 X% j" s0 J; N6 C; p1 a相关资料 ( K8 S2 w% u0 F/ A( L1 C
8 T2 @4 Q+ A9 r$ G8 g2 M2 S# J
CEGUI0.4.1字体定义文件说明 / @, m* ?9 @- T$ I/ q7 T& Q! z" y' R
http://www.cegui.org.uk/wiki/index.php/Font_files
% `, K0 D" e$ s& [" J
* l, x7 w" s: W- ~3 @CEGUI0.5.X关于字体定义文件的变更点 & i# C1 _" x( A: z" F; z
原文 6 D6 x% E3 B3 P5 W' S- J
http://www.cegui.org.uk/wiki/index.php/Release_Notes_0.5.X
% E0 U7 i# K* m2 l2 w/ p3 _9 ^+ ?
1 ?1 O- w1 D) }- y/ D. S8 m XA FontDemo sample which shows several properties of the new Font class.
! S [( y" }* G3 AThe above changes resulted in some slight changes to the format of the XML .font files:
: p6 ~* X2 a% l2 u# W4 I6 N: A% P- Z$ N+ \9 F- L
GlyphSet, GlyphRange, Glyph sections of the Font are gone ( j3 a) x0 W- l% A5 g4 ]
The possible values of the Type attribute are now:
7 O8 t/ c! q) d4 GFreeType (instead of Dynamic) & m( q" c2 ^* S6 g
Pixmap (instead of Static) 7 L1 [6 G% Q! @5 u
The FirstCodepoint and LastCodepoint attributes of the Font section were removed
+ A: b; Q$ G7 {. UAfter you change your .font files as mentioned above, they should work without problems.
) W2 k8 t2 @ j4 L
- b/ e7 s% |4 l& l7 W下面这篇文章应该是针对CEGUI0.4.1这个版本来说的。 : W X7 R! q" ?
# Q; C8 B @; f' Q
如何让CEGUI显示出中文 ( j$ i* K4 q0 A( S7 Z
原文
" a* P i* A9 t$ u* thttp://blog.csdn.net/khzide/archive/2005/09/07/473765.aspx
8 s# ]5 {3 w2 i7 F* y x9 c7 j; C0 E( o7 Y+ t7 g3 b1 G7 G0 A5 Z& Y2 o Y
CEGUI(Crazy Eddie's GUI System ) 是一个免费并开放源码的图形(GUI API库),写于C++, 并且面向对象。你可以用它来创建游戏中的GUI部分,而不用再自已动手去实现。 5 F4 i0 m( b9 l2 D1 k' u
) o: z5 X2 y3 a管方网站:http://www.cegui.org.uk/ 上面有很多有用的信息,如果你要详细了解它的话,可以常去这上面逛逛。 ! `, k! I& D, I' r/ e
2 S$ @ w4 N. V$ q" y' G
发现有好多战友与我一样,一开始用它的时候不知道如何显示出中文,只是听说很easy,但却自已试不出来。我走了一些弯路,希望别人不要再跟我一样了。其实它实现起来真是是很easy. CEGUI是基于utf8格式的,所以可以显示出中文,但需要注意的是这里面烦是设及到汉字的地方都要保存成(utf8)格式,或者在程序中动态转换成utf8字符串也行。至于如何保存在utf8格式,有很多哟,可以用EditPlus, uedit32, 更酷的一个就是vs.net了。哈哈,可惜它太大了,携带起来不方便。 " e0 n$ E& Z5 \" _& K S5 q
" F8 o! }3 B, @4 ]; r1 D1.你要指定一种中文字体文件(*.ttf) 例如我选用的simhei.ttf, 这可以在window目录中的font文件夹中找到一些。 这就是CEGUI中我们要用到的中文字体来源。 : g, C/ _( `& O' [# q
7 Q3 a. [! n" t( G R. x, m1 O2. 需要定义一个 (.font)文件, 这个文件其实是CEGUI用于生成字符映射图片的一个索引文件(xml格式),在<Font> 节下面定义一个子项<GlyphSet> 并指定其属生 Glyphs="所有需要用到的中文字符集" CEGUI会根据它而生成最终字符映射图片,如果你这里没有将用到的汉字全部列出,没关系,大不了就是CEGUI不会显示出你的字符或者显示成乱码^-^,系统不会崩的。 6 n" o* f7 Q/ C6 c4 [* z, Q
' L) A- D# y& o7 ]3.字个(.font)文件一定要保存成(utf8)格式,这是很重要的哟。 8 O, J4 V( j7 W3 s$ G$ F2 X
: e: b. t3 Z0 n* y( ~4.如果你的程序中用到了汉字,那么这个文件最好也要保存成(utf8)格式,当然你也可以去进行ascii<->utf8的转换,都一样的。 5 b9 O% ~7 g V+ n
* W( O4 V1 I7 w
^$ X& B$ X: Q* ^- c- v这就完事了,怎么样,很简单吧。至于如何去载入字体文件,如何使用CEGUI,就不关吾的事了。相信你即然看了这遍文件,那些也一定会了吧。 ! L* `' f K; o9 m3 T- X3 {
2 p, t+ d# [7 Q2 C3 M+ u( _
( b! P5 R" x c: M3 v5 y- F
6 U0 P# L+ i1 A' E; `
0 A: b) j5 ^+ p
5 s+ t6 X; p0 A' R
i7 D' n: s3 T1 W; \3 ~ |