Skip to content

Commit 443cf83

Browse files
committed
make fnt frame cache working
1 parent aef313a commit 443cf83

File tree

1 file changed

+45
-20
lines changed

1 file changed

+45
-20
lines changed

Diff for: cocos2d/labels/CCLabelBMFont.js

+45-20
Original file line numberDiff line numberDiff line change
@@ -224,8 +224,11 @@ cc.LabelBMFont = cc.SpriteBatchNode.extend(/** @lends cc.LabelBMFont# */{
224224
if (fntFile) {
225225
var newConf = cc.loader.getRes(fntFile);
226226
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+
}
229232
}
230233

231234
self._config = newConf;
@@ -881,7 +884,11 @@ cc.LabelBMFont.create = function (str, fntFile, width, alignment, imageOffset) {
881884
return new cc.LabelBMFont(str, fntFile, width, alignment, imageOffset);
882885
};
883886

887+
cc.FntFrameCache = {};
888+
884889
var _fntLoader = {
890+
FNT_HEAD: /fntframes [^\n]*(\n|$)/gi,
891+
FNT_FRAME_NAME: /fntframe [^\n]*(\n|$)/gi,
885892
INFO_EXP: /info [^\n]*(\n|$)/gi,
886893
COMMON_EXP: /common [^\n]*(\n|$)/gi,
887894
PAGE_EXP: /page [^\n]*(\n|$)/gi,
@@ -907,24 +914,8 @@ var _fntLoader = {
907914
return obj;
908915
},
909916

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;
928919
//common
929920
var commonObj = self._parseStrToObj(fntStr.match(self.COMMON_EXP)[0]);
930921
fnt.commonHeight = commonObj["lineHeight"];
@@ -963,6 +954,39 @@ var _fntLoader = {
963954
kerningDict[(kerningObj["first"] << 16) | (kerningObj["second"] & 0xffff)] = kerningObj["amount"];
964955
}
965956
}
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+
}
966990
return fnt;
967991
},
968992

@@ -982,3 +1006,4 @@ var _fntLoader = {
9821006
}
9831007
};
9841008
cc.loader.register(["fnt"], _fntLoader);
1009+

0 commit comments

Comments
 (0)