var FrameCache ={
_CCNS_REG1 : /^\s*\{\s*([\-]?\d+[.]?\d*)\s*,\s*([\-]?\d+[.]?\d*)\s*\}\s*$/,
_CCNS_REG2 : /^\s*\{\s*\{\s*([\-]?\d+[.]?\d*)\s*,\s*([\-]?\d+[.]?\d*)\s*\}\s*,\s*\{\s*([\-]?\d+[.]?\d*)\s*,\s*([\-]?\d+[.]?\d*)\s*\}\s*\}\s*$/,
_spriteFrames: {},
_spriteFramesAliases: {},
_frameConfigCache : {},
_rectFromString : function (content) {
var result = this._CCNS_REG2.exec(content);
if(!result) return cc.rect(0, 0, 0, 0);
return cc.rect(parseFloat(result[1]), parseFloat(result[2]), parseFloat(result[3]), parseFloat(result[4]));
},
_pointFromString : function (content) {
var result = this._CCNS_REG1.exec(content);
if(!result) return cc.p(0,0);
return cc.p(parseFloat(result[1]), parseFloat(result[2]));
},
_sizeFromString : function (content) {
var result = this._CCNS_REG1.exec(content);
if(!result) return cc.size(0, 0);
return cc.size(parseFloat(result[1]), parseFloat(result[2]));
},
_getFrameConfig : function(url){
var dict = cc.loader.getRes(url);
cc.assert(dict, cc._LogInfos.spriteFrameCache__getFrameConfig_2, url);
cc.loader.release(url);//release it in loader
if(dict._inited){
this._frameConfigCache[url] = dict;
return dict;
}
this._frameConfigCache[url] = this._parseFrameConfig(dict);
return this._frameConfigCache[url];
},
_parseFrameConfig: function(dict) {
var tempFrames = dict["frames"], tempMeta = dict["metadata"] || dict["meta"];
var frames = {}, meta = {};
var format = 0;
if(tempMeta){//init meta
var tmpFormat = tempMeta["format"];
format = (tmpFormat.length <= 1) ? parseInt(tmpFormat) : tmpFormat;
meta.image = tempMeta["textureFileName"] || tempMeta["textureFileName"] || tempMeta["image"];
}
for (var key in tempFrames) {
var frameDict = tempFrames[key];
if(!frameDict) continue;
var tempFrame = {};
if (format == 0) {
tempFrame.rect = cc.rect(frameDict["x"], frameDict["y"], frameDict["width"], frameDict["height"]);
tempFrame.rotated = false;
tempFrame.offset = cc.p(frameDict["offsetX"], frameDict["offsetY"]);
var ow = frameDict["originalWidth"];
var oh = frameDict["originalHeight"];
// check ow/oh
if (!ow || !oh) {
cc.log(cc._LogInfos.spriteFrameCache__getFrameConfig);
}
// Math.abs ow/oh
ow = Math.abs(ow);
oh = Math.abs(oh);
tempFrame.size = cc.size(ow, oh);
} else if (format == 1 || format == 2) {
tempFrame.rect = this._rectFromString(frameDict["frame"]);
tempFrame.rotated = frameDict["rotated"] || false;
tempFrame.offset = this._pointFromString(frameDict["offset"]);
tempFrame.size = this._sizeFromString(frameDict["sourceSize"]);
} else if (format == 3) {
// get values
var spriteSize = this._sizeFromString(frameDict["spriteSize"]);
var textureRect = this._rectFromString(frameDict["textureRect"]);
if (spriteSize) {
textureRect = cc.rect(textureRect.x, textureRect.y, spriteSize.width, spriteSize.height);
}
tempFrame.rect = textureRect;
tempFrame.rotated = frameDict["textureRotated"] || false; // == "true";
tempFrame.offset = this._pointFromString(frameDict["spriteOffset"]);
tempFrame.size = this._sizeFromString(frameDict["spriteSourceSize"]);
tempFrame.aliases = frameDict["aliases"];
} else {
var tmpFrame = frameDict["frame"], tmpSourceSize = frameDict["sourceSize"];
key = frameDict["filename"] || key;
tempFrame.rect = cc.rect(tmpFrame["x"], tmpFrame["y"], tmpFrame["w"], tmpFrame["h"]);
tempFrame.rotated = frameDict["rotated"] || false;
tempFrame.offset = cc.p(0, 0);
tempFrame.size = cc.size(tmpSourceSize["w"], tmpSourceSize["h"]);
}
frames[key] = tempFrame;
}
return {_inited: true, frames: frames, meta: meta};
},
_createSpriteFrames: function(headkey,url, frameConfig, texture) {
var frames = frameConfig.frames, meta = frameConfig.meta;
if(!texture){
var texturePath = cc.path.changeBasename(url, meta.image || ".png");
texture = cc.textureCache.addImage(texturePath);
}else if(texture instanceof cc.Texture2D){
//do nothing
}else if(cc.isString(texture)){//string
texture = cc.textureCache.addImage(texture);
}else{
cc.assert(0, cc._LogInfos.spriteFrameCache_addSpriteFrames_3);
}
//create sprite frames
var spAliases = this._spriteFramesAliases, spriteFrames = this._spriteFrames;
for (var key in frames) {
var frame = frames[key];
var spriteFrame = spriteFrames[key];
if (!spriteFrame) {
spriteFrame = new cc.SpriteFrame(texture, frame.rect, frame.rotated, frame.offset, frame.size);
var aliases = frame.aliases;
if(aliases){//set aliases
for(var i = 0, li = aliases.length; i < li; i++){
var alias = aliases[i];
if (spAliases[alias])
cc.log(cc._LogInfos.spriteFrameCache_addSpriteFrames, alias);
spAliases[alias] = key;
}
}
if (cc._renderType === cc.game.RENDER_TYPE_CANVAS && spriteFrame.isRotated()) {
//clip to canvas
var locTexture = spriteFrame.getTexture();
if (locTexture.isLoaded()) {
var tempElement = spriteFrame.getTexture().getHtmlElementObj();
tempElement = cc.Sprite.CanvasRenderCmd._cutRotateImageToCanvas(tempElement, spriteFrame.getRectInPixels());
var tempTexture = new cc.Texture2D();
tempTexture.initWithElement(tempElement);
tempTexture.handleLoadedTexture();
spriteFrame.setTexture(tempTexture);
var rect = spriteFrame._rect;
spriteFrame.setRect(cc.rect(0, 0, rect.width, rect.height));
}
}
if(!spriteFrames[headkey])spriteFrames[headkey]={};
spriteFrames[headkey][key] = spriteFrame;
}
}
},
replaceSpriteFrames:function(headkey,url,texture){
cc.assert(url, cc._LogInfos.spriteFrameCache_addSpriteFrames_2);
//Is it a SpriteFrame plist?
var dict = this._frameConfigCache[url] || cc.loader.getRes(url);
if(!dict || !dict["frames"])
return;
var frameConfig = this._frameConfigCache[url] || this._getFrameConfig(url);
this._createSpriteFrames(headkey,url, frameConfig, texture);
},
addSpriteFrames: function (headkey,url, texture) {
cc.assert(url, cc._LogInfos.spriteFrameCache_addSpriteFrames_2);
//Is it a SpriteFrame plist?
var dict = this._frameConfigCache[url] || cc.loader.getRes(url);
if(!dict || !dict["frames"])
return;
var frameConfig = this._frameConfigCache[url] || this._getFrameConfig(url);
this._createSpriteFrames(headkey,url, frameConfig, texture);
},
getSpriteFrame: function (headkey,name) {
var self = this;
return self._spriteFrames[headkey][name];
},
_clear: function () {
this._spriteFrames = {};
this._spriteFramesAliases = {};
this._frameConfigCache = {};
}
};
use this as
FrameCache.addSpriteFrames(me.id,res[me.id].plist,res[me.id].png);//headkey plist png
hum.setSpriteFrame(FrameCache.getSpriteFrame(me.id,me.id+'_'+this.face + '_run_0.png'));