相关网址
0 S( }" ~9 O" ], j3 Chttp://www.frictionalgames.com/forum/forum-27.html 0 t# I6 Y& r! N; m X
- o- P% n) `9 ]( l& b
----------------------------------1 u/ W+ U$ w# k$ U2 e
2010.10.7 更新9 g/ a$ w2 h( J- V J" _
研究了一下这个游戏的源代码,在\sources\resources\FontManager.cpp里,我发现这个游戏还可以支持ttf字体文件。) M7 J% s0 m9 d/ t" T1 d9 a& G
方法很简单,只要在fonts目录下放上和.fnt文件同名的.ttf文件,然后把.fnt文件移走即可。; w2 c9 `7 z1 e+ X3 {
相关代码如下! X$ \1 q. z0 F/ a
iFontData* cFontManager::CreateFontData(const tString& asName, int alSize,unsigned short alFirstChar,
, I% }# `- h, Z. j unsigned short alLastChar)
! n( S. z( n) J+ A { x; W2 @% |: Y6 d6 e3 d
tString sPath;
* D J2 N& Q; Y E4 ~4 F6 e iFontData* pFont;
- f; L" W- M+ s3 \4 K tString asNewName = cString::ToLowerCase(asName);
0 e2 M- ]$ y0 \5 g BeginLoad(asName);
& M7 c2 }# v, e2 ^2 x% z' g * m! U8 B! b$ R# l7 l( `
//asNewName = cString::SetFileExt(asName,"ttf");# m" q# {) N( p; s/ ^0 K+ C
pFont = static_cast<iFontData*>(this->FindLoadedResource(asNewName,sPath));( `; I5 j) f; ?3 z: G! H" m: p
if(pFont==NULL && sPath!="")0 J. H8 _ f; G) J6 G
{- [0 m6 S* n# o: \2 G: T0 O. R
pFont = mpGraphics->GetLowLevel()->CreateFontData(asNewName);
' j' i. K* y( H! d" T pFont->SetUp(mpGraphics->GetDrawer(),mpLowLevelResources,mpGui);
# C1 \& ^( a+ n! h7 O4 |
* _6 v6 L9 `1 y tString sExt = cString::ToLowerCase(cString::GetFileExt(asName));
5 _, e" e9 s# Q1 r //True Type Font
' |' C2 R, f1 K \, i8 L if(sExt == "ttf")) ~, a; z1 ?8 ?- D* }9 f
{4 }2 k5 H+ h# H$ ]" V1 R
if(pFont->CreateFromFontFile(sPath,alSize,alFirstChar,alLastChar)==false){
@5 N6 c$ |( p! e hplDelete(pFont);+ ~ @4 F+ a& [( o. y! d/ B* }
EndLoad();
" Q, E- Q q9 \ return NULL;& L2 l4 [1 }8 W) _9 O! n& }
}
2 F. y! n8 Y- f4 t" v' t8 W \ }
" J n) `! Q$ D5 g/ c" k //Angel code font type
8 Z: ?* F' x X4 @* P* n9 e else if(sExt == "fnt")
1 Z1 o8 g D& h {
* B( `$ U) z6 S7 a2 @ if(pFont->CreateFromBitmapFile(sPath)==false){ ?3 I4 K b4 i
hplDelete(pFont);
' u' {( U3 e$ J: V- Z( K* J2 X EndLoad();6 }0 e5 j& B+ y) I: r
return NULL;
+ }$ u( R0 W( H7 w; D7 E% c }% p0 C, t# q. s! p& w
}, o3 s! T2 e/ I0 p3 X* R6 ^9 @
else
; [) ^! y/ g1 E4 w+ D {0 \& f h' k4 W# C- B$ Z
Error("Font '%s' has an unkown extension!\n",asName.c_str());+ I; S2 @* @. W) i2 N0 G2 z/ w) T
hplDelete(pFont);
( L3 ]' m# X! B0 s, p- A2 w3 C EndLoad();
# S" [. Q9 }7 A: H$ z4 O return NULL;
1 u! O) x* Y6 g8 i4 ?" q, w }( I9 P; W7 o+ q( ~, h+ |+ a
: w7 [* t) h( @- x6 O //mpResources->GetImageManager()->FlushAll();
$ L- w2 |) S6 s6 ~ AddResource(pFont);$ w6 \8 n- \/ o8 s+ E, V
}
c& c9 I2 P. e" I* x4 Q if(pFont)pFont->IncUserCount();/ @( z9 O: o7 T9 Z5 Q/ i
else Error("Couldn't create font '%s'\n",asNewName.c_str());2 ]9 ^; L; |) z! x9 y
. X4 p9 F \8 o" W0 N, u2 _
EndLoad();
/ F9 F8 ]- S: w' u9 m4 l2 b% E return pFont;
- L; U7 ~$ |" ^0 e2 A+ J$ j$ h } |