@@ -224,8 +224,11 @@ cc.LabelBMFont = cc.SpriteBatchNode.extend(/** @lends cc.LabelBMFont# */{
224
224
if ( fntFile ) {
225
225
var newConf = cc . loader . getRes ( fntFile ) ;
226
226
if ( ! newConf ) {
227
- cc . log ( "cc.LabelBMFont.initWithString(): Impossible to create font. Please check file" ) ;
228
- return false ;
227
+ newConf = cc . FntFrameCache [ cc . path . basename ( fntFile ) ] ;
228
+ if ( ! newConf ) {
229
+ cc . log ( "cc.LabelBMFont.initWithString(): Impossible to create font. Please check file" ) ;
230
+ return false ;
231
+ }
229
232
}
230
233
231
234
self . _config = newConf ;
@@ -881,7 +884,11 @@ cc.LabelBMFont.create = function (str, fntFile, width, alignment, imageOffset) {
881
884
return new cc . LabelBMFont ( str , fntFile , width , alignment , imageOffset ) ;
882
885
} ;
883
886
887
+ cc . FntFrameCache = { } ;
888
+
884
889
var _fntLoader = {
890
+ FNT_HEAD : / f n t f r a m e s [ ^ \n ] * ( \n | $ ) / gi,
891
+ FNT_FRAME_NAME : / f n t f r a m e [ ^ \n ] * ( \n | $ ) / gi,
885
892
INFO_EXP : / i n f o [ ^ \n ] * ( \n | $ ) / gi,
886
893
COMMON_EXP : / c o m m o n [ ^ \n ] * ( \n | $ ) / gi,
887
894
PAGE_EXP : / p a g e [ ^ \n ] * ( \n | $ ) / gi,
@@ -907,24 +914,8 @@ var _fntLoader = {
907
914
return obj ;
908
915
} ,
909
916
910
- /**
911
- * Parse Fnt string.
912
- * @param fntStr
913
- * @param url
914
- * @returns {{} }
915
- */
916
- parseFnt : function ( fntStr , url ) {
917
- var self = this , fnt = { } ;
918
- //padding
919
- var infoObj = self . _parseStrToObj ( fntStr . match ( self . INFO_EXP ) [ 0 ] ) ;
920
- var paddingArr = infoObj [ "padding" ] . split ( "," ) ;
921
- var padding = {
922
- left : parseInt ( paddingArr [ 0 ] ) ,
923
- top : parseInt ( paddingArr [ 1 ] ) ,
924
- right : parseInt ( paddingArr [ 2 ] ) ,
925
- bottom : parseInt ( paddingArr [ 3 ] )
926
- } ;
927
-
917
+ _parseFntContent : function ( fnt , fntStr , url ) {
918
+ var self = this ;
928
919
//common
929
920
var commonObj = self . _parseStrToObj ( fntStr . match ( self . COMMON_EXP ) [ 0 ] ) ;
930
921
fnt . commonHeight = commonObj [ "lineHeight" ] ;
@@ -963,6 +954,39 @@ var _fntLoader = {
963
954
kerningDict [ ( kerningObj [ "first" ] << 16 ) | ( kerningObj [ "second" ] & 0xffff ) ] = kerningObj [ "amount" ] ;
964
955
}
965
956
}
957
+
958
+ return fnt ;
959
+ } ,
960
+
961
+ /**
962
+ * Parse Fnt string.
963
+ * @param fntStr
964
+ * @param url
965
+ * @returns {{} }
966
+ */
967
+ parseFnt : function ( fntStr , url ) {
968
+ var self = this , fnt = { } ;
969
+ var headString = fntStr . match ( self . FNT_HEAD ) ;
970
+ if ( headString ) {
971
+ var headObj = self . _parseStrToObj ( headString [ 0 ] ) ;
972
+ if ( headObj && headObj . count ) {
973
+ fntStr = fntStr . substr ( headString [ 0 ] . length ) ;
974
+ var fntFrames = fntStr . split ( "----" ) ;
975
+ for ( var i = 0 ; i < headObj . count ; ++ i ) {
976
+ var contentString = fntFrames [ i ] ;
977
+ var frameNameStr = contentString . match ( self . FNT_FRAME_NAME ) ;
978
+ if ( frameNameStr ) {
979
+ var frameName = self . _parseStrToObj ( frameNameStr [ 0 ] ) ;
980
+ if ( frameName && frameName . name ) {
981
+ fnt = { } ;
982
+ cc . FntFrameCache [ frameName . name ] = this . _parseFntContent ( fnt , contentString . substr ( frameNameStr [ 0 ] . length ) , url ) ;
983
+ }
984
+ }
985
+ }
986
+ }
987
+ } else {
988
+ fnt = this . _parseFntContent ( fnt , fntStr , url ) ;
989
+ }
966
990
return fnt ;
967
991
} ,
968
992
@@ -982,3 +1006,4 @@ var _fntLoader = {
982
1006
}
983
1007
} ;
984
1008
cc . loader . register ( [ "fnt" ] , _fntLoader ) ;
1009
+
0 commit comments