CEGUI是一个开放源码的开发游戏界面的库,如果你在游戏里发现CEGUIBase_d.dll之类以CEGUI开头的DLL的话,这个游戏的界面就是CEGUI做的,游戏字幕的输出自然也是用它。
; I) o8 O! N! Y# ^* D- S, B5 G# t4 Z0 {* |4 C) }% Y
CEGUI有0.4.1,0.5.X,0.6.X等几个版本,从0.5.X开始就对中文完美支持了。
5 _* W! Z$ ~9 M5 \4 }问题是0.4.1这个版本,对中文的支持不太完美,说是不能换页之类的。
9 h& @) k2 E! O4 S' E; t+ C' y& }现阶段,不少AVG游戏中还是用CEGUI0.4.1这个版本,比如安徒生童话这个AVG游戏.
3 V2 c* b2 s, l& x因为FONT字体定义文件的格式不同,所以可以判断出是0.4.1这个版本
+ o% K' e6 \0 s" ]
7 D8 m6 N" f. C+ a6 R! X' }3 B4 x& C解决方法
7 m- |( y! M. x, e# V关于解决方法,我查了不少资料,大致有2个
# k+ ]9 x' I! C; v3 [! z9 z. P% k1。改造0.4.1的DLL文件,参照0.5.X的代码,把关键地方进行修改。
- b$ q& j: `) K* [) m, v! d- A 这个方法较难,暂不讨论。
, C) R" ?2 | G9 R% Y. U" I7 }2 D, A' C
2。0.4.1的字体定义文件还是为中文留了一条路的。 / s0 K2 _* X' _4 Q' Z# O `0 c
可以用GlyphSet这个属性只生成要用到的字体的图片。
7 a0 Y9 P7 o: g 中文汉字有6000多个,但是在一个AVG里用到的中文可能只有1000多个。
( B8 X! }! \# o! V 把这些中文汉字定义到GlyphSet这个属性,也许就能正常显示了。 $ }8 r3 o2 s: h- u, C& a' Z8 v
这个方法尚未做实际测试,效果未知。
! _( \1 g0 q. F( y9 z4 p) |$ f( y. {' Q% a8 R/ O& K4 F' H& f) i
相关资料 9 S5 e/ O4 ?$ F3 g; o' @
+ H8 O$ F8 j1 u0 V
CEGUI0.4.1字体定义文件说明
! }/ n2 |1 Q3 S9 t9 J% ihttp://www.cegui.org.uk/wiki/index.php/Font_files
0 E- _/ F( W& t) ]' ^: J; e& }3 T+ f2 j/ V' C6 P) u, Y
CEGUI0.5.X关于字体定义文件的变更点
9 V; i. [. n5 Q6 O* Z4 @% P原文 4 D. d" e$ D& m* y6 L- z! t f
http://www.cegui.org.uk/wiki/index.php/Release_Notes_0.5.X
" S& f; s1 z2 V$ T8 h9 e- w, s2 L( a* R
A FontDemo sample which shows several properties of the new Font class. @. G7 R t. {
The above changes resulted in some slight changes to the format of the XML .font files: 1 u: O. ?4 o7 P: H; F
- b8 ^7 \3 ~6 f$ O1 J- O
GlyphSet, GlyphRange, Glyph sections of the Font are gone 4 U5 J2 z0 {9 V9 F# ~
The possible values of the Type attribute are now: # c, e! N6 V7 W; m9 |
FreeType (instead of Dynamic) - y! T1 m( \1 m' o5 {5 `/ ]
Pixmap (instead of Static) 1 o- M' K. q7 v5 n2 _
The FirstCodepoint and LastCodepoint attributes of the Font section were removed ! l. E7 R1 x, ?" i
After you change your .font files as mentioned above, they should work without problems.
$ m& j$ W8 `7 W7 i" M 0 B# G& B. Z/ A! Y
下面这篇文章应该是针对CEGUI0.4.1这个版本来说的。
- r6 |1 r) ^: r/ }
% C: Y1 a! o. L如何让CEGUI显示出中文 ! Z% @$ l1 {! v0 j8 B* U; l
原文
& j3 G8 d% [$ L! yhttp://blog.csdn.net/khzide/archive/2005/09/07/473765.aspx % T7 q; s; O/ U
, V* d) { f( rCEGUI(Crazy Eddie's GUI System ) 是一个免费并开放源码的图形(GUI API库),写于C++, 并且面向对象。你可以用它来创建游戏中的GUI部分,而不用再自已动手去实现。 ' D/ y; k) X: r
5 V# @7 @$ _$ Q管方网站:http://www.cegui.org.uk/ 上面有很多有用的信息,如果你要详细了解它的话,可以常去这上面逛逛。
. t" @, \0 @( B5 G# |
0 r. g, v/ }1 j/ q- P* F发现有好多战友与我一样,一开始用它的时候不知道如何显示出中文,只是听说很easy,但却自已试不出来。我走了一些弯路,希望别人不要再跟我一样了。其实它实现起来真是是很easy. CEGUI是基于utf8格式的,所以可以显示出中文,但需要注意的是这里面烦是设及到汉字的地方都要保存成(utf8)格式,或者在程序中动态转换成utf8字符串也行。至于如何保存在utf8格式,有很多哟,可以用EditPlus, uedit32, 更酷的一个就是vs.net了。哈哈,可惜它太大了,携带起来不方便。
% p# D( Q! ~4 g& P
9 d/ J# `& A6 w5 D$ n$ M1.你要指定一种中文字体文件(*.ttf) 例如我选用的simhei.ttf, 这可以在window目录中的font文件夹中找到一些。 这就是CEGUI中我们要用到的中文字体来源。
! j; G# U8 ?3 P7 b& N0 ^! l8 Z8 N
2. 需要定义一个 (.font)文件, 这个文件其实是CEGUI用于生成字符映射图片的一个索引文件(xml格式),在<Font> 节下面定义一个子项<GlyphSet> 并指定其属生 Glyphs="所有需要用到的中文字符集" CEGUI会根据它而生成最终字符映射图片,如果你这里没有将用到的汉字全部列出,没关系,大不了就是CEGUI不会显示出你的字符或者显示成乱码^-^,系统不会崩的。
2 _7 I6 M# p0 t' }6 `* l5 N% N7 C% r. M1 A( Q7 Z: f
3.字个(.font)文件一定要保存成(utf8)格式,这是很重要的哟。
; ]. f3 q9 e7 r# \2 G
) v; V! ?' v6 b$ P. h+ @4.如果你的程序中用到了汉字,那么这个文件最好也要保存成(utf8)格式,当然你也可以去进行ascii<->utf8的转换,都一样的。
x$ z9 W+ Y8 C; O0 S% y
+ Q# P( @+ {# ]% f1 l% F' N6 {* n( T$ T5 r4 A; `! p; `
这就完事了,怎么样,很简单吧。至于如何去载入字体文件,如何使用CEGUI,就不关吾的事了。相信你即然看了这遍文件,那些也一定会了吧。
$ }2 N: U' t, b# h4 e0 w
* p' s; N; ]( A H$ i3 H) e
# }! w( Y2 V3 O E1 M( B7 T" w* |+ \' |* T( T
0 t+ @2 N; W" F
7 ^) w U: i+ W0 l' w; r' R. y& [$ i5 y3 a
|