3333 * cc.SpriteFrameCache.getInstance().addSpriteFrames(s_grossiniPlist);
3434 */
3535cc . SpriteFrameCache = cc . Class . extend ( /** @lends cc.SpriteFrameCache# */ {
36- _spriteFrames :null ,
37- _spriteFramesAliases :null ,
38- _loadedFileNames :null ,
36+ _spriteFrames : null ,
37+ _spriteFramesAliases : null ,
38+ _loadedFileNames : null ,
3939
4040 /**
4141 * Constructor
4242 */
43- ctor :function ( ) {
43+ ctor : function ( ) {
4444 this . _spriteFrames = { } ;
4545 this . _spriteFramesAliases = { } ;
4646 this . _loadedFileNames = [ ] ;
@@ -51,17 +51,19 @@ cc.SpriteFrameCache = cc.Class.extend(/** @lends cc.SpriteFrameCache# */{
5151 * @param {object } dictionary
5252 * @param {cc.Texture2D } texture
5353 */
54- _addSpriteFramesWithDictionary :function ( dictionary , texture ) {
55- var metadataDict = dictionary [ "metadata" ] ;
54+ _addSpriteFramesWithDictionary : function ( dictionary , texture ) {
55+ var metadataDict = dictionary [ "metadata" ] || dictionary [ "meta" ] ;
5656 var framesDict = dictionary [ "frames" ] ;
57+
5758 var format = 0 ;
5859 // get the format
59- if ( metadataDict != null ) {
60- format = parseInt ( this . _valueForKey ( "format" , metadataDict ) ) ;
60+ if ( metadataDict ) {
61+ var tmpFormat = metadataDict [ "format" ] ;
62+ format = ( tmpFormat . length <= 1 ) ? parseInt ( tmpFormat ) : tmpFormat ;
6163 }
6264
6365 // check the format
64- if ( format < 0 || format > 3 ) {
66+ if ( format < 0 || format > 3 ) {
6567 cc . log ( "format is not supported for cc.SpriteFrameCache.addSpriteFramesWithDictionary" ) ;
6668 return ;
6769 }
@@ -75,14 +77,14 @@ cc.SpriteFrameCache = cc.Class.extend(/** @lends cc.SpriteFrameCache# */{
7577 }
7678
7779 if ( format == 0 ) {
78- var x = parseFloat ( this . _valueForKey ( "x" , frameDict ) ) ;
79- var y = parseFloat ( this . _valueForKey ( "y" , frameDict ) ) ;
80- var w = parseFloat ( this . _valueForKey ( "width" , frameDict ) ) ;
81- var h = parseFloat ( this . _valueForKey ( "height" , frameDict ) ) ;
82- var ox = parseFloat ( this . _valueForKey ( "offsetX" , frameDict ) ) ;
83- var oy = parseFloat ( this . _valueForKey ( "offsetY" , frameDict ) ) ;
84- var ow = parseInt ( this . _valueForKey ( "originalWidth" , frameDict ) ) ;
85- var oh = parseInt ( this . _valueForKey ( "originalHeight" , frameDict ) ) ;
80+ var x = parseFloat ( frameDict [ "x" ] ) ;
81+ var y = parseFloat ( frameDict [ "y" ] ) ;
82+ var w = parseFloat ( frameDict [ "width" ] ) ;
83+ var h = parseFloat ( frameDict [ "height" ] ) ;
84+ var ox = parseFloat ( frameDict [ "offsetX" ] ) ;
85+ var oy = parseFloat ( frameDict [ "offsetY" ] ) ;
86+ var ow = parseInt ( frameDict [ "originalWidth" ] ) ;
87+ var oh = parseInt ( frameDict [ "originalHeight" ] ) ;
8688 // check ow/oh
8789 if ( ! ow || ! oh ) {
8890 cc . log ( "cocos2d: WARNING: originalWidth/Height not found on the cc.SpriteFrame. AnchorPoint won't work as expected. Regenrate the .plist" ) ;
@@ -93,27 +95,29 @@ cc.SpriteFrameCache = cc.Class.extend(/** @lends cc.SpriteFrameCache# */{
9395 // create frame
9496 spriteFrame = new cc . SpriteFrame ( ) ;
9597 spriteFrame . initWithTexture ( texture , cc . rect ( x , y , w , h ) , false , cc . p ( ox , oy ) , cc . size ( ow , oh ) ) ;
96- } else if ( format == 1 || format == 2 ) {
97- var frame = cc . RectFromString ( this . _valueForKey ( "frame" , frameDict ) ) ;
98+ }
99+ else if ( format == 1 || format == 2 ) {
100+ var frame = cc . RectFromString ( frameDict [ "frame" ] ) ;
98101 var rotated = false ;
99102
100103 // rotation
101104 if ( format == 2 ) {
102- rotated = this . _valueForKey ( "rotated" , frameDict ) == "true" ;
105+ rotated = frameDict [ "rotated" ] == "true" ;
103106 }
104- var offset = cc . PointFromString ( this . _valueForKey ( "offset" , frameDict ) ) ;
105- var sourceSize = cc . SizeFromString ( this . _valueForKey ( "sourceSize" , frameDict ) ) ;
107+ var offset = cc . PointFromString ( frameDict [ "offset" ] ) ;
108+ var sourceSize = cc . SizeFromString ( frameDict [ "sourceSize" ] ) ;
106109 // create frame
107110 spriteFrame = new cc . SpriteFrame ( ) ;
108111 spriteFrame . initWithTexture ( texture , frame , rotated , offset , sourceSize ) ;
109- } else if ( format == 3 ) {
112+ }
113+ else if ( format == 3 ) {
110114 // get values
111115 var spriteSize , spriteOffset , spriteSourceSize , textureRect , textureRotated ;
112- spriteSize = cc . SizeFromString ( this . _valueForKey ( "spriteSize" , frameDict ) ) ;
113- spriteOffset = cc . PointFromString ( this . _valueForKey ( "spriteOffset" , frameDict ) ) ;
114- spriteSourceSize = cc . SizeFromString ( this . _valueForKey ( "spriteSourceSize" , frameDict ) ) ;
115- textureRect = cc . RectFromString ( this . _valueForKey ( "textureRect" , frameDict ) ) ;
116- textureRotated = this . _valueForKey ( "textureRotated" , frameDict ) == "true" ;
116+ spriteSize = cc . SizeFromString ( frameDict [ "spriteSize" ] ) ;
117+ spriteOffset = cc . PointFromString ( frameDict [ "spriteOffset" ] ) ;
118+ spriteSourceSize = cc . SizeFromString ( frameDict [ "spriteSourceSize" ] ) ;
119+ textureRect = cc . RectFromString ( frameDict [ "textureRect" ] ) ;
120+ textureRotated = frameDict [ "textureRotated" ] == "true" ;
117121
118122 // get aliases
119123 var aliases = frameDict [ "aliases" ] ;
@@ -138,11 +142,22 @@ cc.SpriteFrameCache = cc.Class.extend(/** @lends cc.SpriteFrameCache# */{
138142 spriteFrame . initWithTexture ( texture , spriteSize , textureRotated , spriteOffset , spriteSourceSize ) ;
139143 }
140144 }
145+ else {
146+ var filename = frameDict [ "filename" ] , tmpFrame = frameDict [ "frame" ] , tmpSourceSize = frameDict [ "sourceSize" ] ;
147+ var jsonFrame = cc . rect ( tmpFrame . x , tmpFrame . y , tmpFrame . w , tmpFrame . h ) ;
148+ var jsonRotated = frameDict [ "rotated" ] ;
149+ var jsonOffset = cc . p ( 0 , 0 ) ;
150+ var jsonSourceSize = cc . size ( tmpSourceSize . w , tmpSourceSize . h ) ;
141151
142- if ( cc . renderContextType === cc . CANVAS && spriteFrame . isRotated ( ) ) {
152+ // create frame
153+ spriteFrame = new cc . SpriteFrame ( ) ;
154+ spriteFrame . initWithTexture ( texture , jsonFrame , jsonRotated , jsonOffset , jsonSourceSize ) ;
155+ }
156+
157+ if ( cc . renderContextType === cc . CANVAS && spriteFrame . isRotated ( ) ) {
143158 //clip to canvas
144159 var locTexture = spriteFrame . getTexture ( ) ;
145- if ( locTexture . isLoaded ( ) ) {
160+ if ( locTexture . isLoaded ( ) ) {
146161 var tempElement = spriteFrame . getTexture ( ) . getHtmlElementObj ( ) ;
147162 tempElement = cc . cutRotateImageToCanvas ( tempElement , spriteFrame . getRectInPixels ( ) ) ;
148163 var tempTexture = new cc . Texture2D ( ) ;
@@ -155,73 +170,60 @@ cc.SpriteFrameCache = cc.Class.extend(/** @lends cc.SpriteFrameCache# */{
155170 }
156171 }
157172
158- // add sprite frame
159- this . _spriteFrames [ key ] = spriteFrame ;
160- }
161- }
162- } ,
163173
164- /**
165- * Adds multiple Sprite Frames from a json file. A texture will be loaded automatically.
166- * @param {object } jsonData
167- * @deprecated
168- */
169- addSpriteFramesWithJson :function ( jsonData ) {
170- cc . log ( "addSpriteFramesWithJson is deprecated, because Json format doesn't support on JSB. Use XML format instead" ) ;
171- var dict = jsonData ;
172- var texturePath = "" ;
174+ // add sprite frame
175+ var keyName = ( filename != null ) ? filename : key ;
176+ this . _spriteFrames [ keyName ] = spriteFrame ;
173177
174- var metadataDict = dict [ "metadata" ] ;
175- if ( metadataDict ) {
176- // try to read texture file name from meta data
177- texturePath = this . _valueForKey ( "textureFileName" , metadataDict ) ;
178- texturePath = texturePath . toString ( ) ;
179- }
180178
181- var texture = cc . TextureCache . getInstance ( ) . addImage ( texturePath ) ;
182- if ( texture ) {
183- this . _addSpriteFramesWithDictionary ( dict , texture ) ;
184- }
185- else {
186- cc . log ( "cocos2d: cc.SpriteFrameCache: Couldn't load texture" ) ;
179+ }
187180 }
188181 } ,
189182
190183 /**
191184 * <p>
192- * Adds multiple Sprite Frames from a plist file.<br/>
193- * A texture will be loaded automatically. The texture name will composed by replacing the .plist suffix with .png<br/>
185+ * Adds multiple Sprite Frames from a plist or json file.<br/>
186+ * A texture will be loaded automatically. The texture name will composed by replacing the .plist or .json suffix with .png<br/>
194187 * If you want to use another texture, you should use the addSpriteFrames:texture method.<br/>
195188 * </p>
196- * @param {String } plist plist filename
189+ * @param {String } filePath file path
197190 * @param {HTMLImageElement|cc.Texture2D|string } texture
198191 * @example
199192 * // add SpriteFrames to SpriteFrameCache With File
200193 * cc.SpriteFrameCache.getInstance().addSpriteFrames(s_grossiniPlist);
194+ * cc.SpriteFrameCache.getInstance().addSpriteFrames(s_grossiniJson);
201195 */
202- addSpriteFrames :function ( plist , texture ) {
203- if ( ! plist )
196+ addSpriteFrames : function ( filePath , texture ) {
197+ if ( ! filePath )
204198 throw "cc.SpriteFrameCache.addSpriteFrames(): plist should be non-null" ;
205- var fileUtils = cc . FileUtils . getInstance ( ) ;
206- var fullPath = fileUtils . fullPathForFilename ( plist ) ;
207- var dict = fileUtils . dictionaryWithContentsOfFileThreadSafe ( fullPath ) ;
199+
200+ var fileUtils = cc . FileUtils . getInstance ( ) , dict ;
201+ var ext = filePath . substr ( filePath . lastIndexOf ( "." , filePath . length ) + 1 , filePath . length ) ;
202+ if ( ext == "plist" ) {
203+ var fullPath = fileUtils . fullPathForFilename ( filePath ) ;
204+ dict = fileUtils . dictionaryWithContentsOfFileThreadSafe ( fullPath ) ;
205+ }
206+ else {
207+ dict = JSON . parse ( fileUtils . getTextFileData ( filePath ) ) ;
208+ }
208209
209210 switch ( arguments . length ) {
210211 case 1 :
211-
212- if ( ! cc . ArrayContainsObject ( this . _loadedFileNames , plist ) ) {
212+ if ( ! cc . ArrayContainsObject ( this . _loadedFileNames , filePath ) ) {
213213 var texturePath = "" ;
214- var metadataDict = dict [ "metadata" ] ;
214+ var metadataDict = dict [ "metadata" ] || dict [ "meta" ] ;
215215 if ( metadataDict ) {
216216 // try to read texture file name from meta data
217- texturePath = this . _valueForKey ( "textureFileName" , metadataDict ) . toString ( ) ;
217+ texturePath = metadataDict [ "textureFileName" ] || metadataDict [ "image" ] ;
218218 }
219+
219220 if ( texturePath != "" ) {
220221 // build texture path relative to plist file
221- texturePath = fileUtils . fullPathFromRelativeFile ( texturePath , plist ) ;
222+ texturePath = fileUtils . fullPathFromRelativeFile ( texturePath , filePath ) ;
223+
222224 } else {
223225 // build texture path by replacing file extension
224- texturePath = plist ;
226+ texturePath = filePath ;
225227
226228 // remove .xxx
227229 var startPos = texturePath . lastIndexOf ( "." , texturePath . length ) ;
@@ -247,7 +249,7 @@ cc.SpriteFrameCache = cc.Class.extend(/** @lends cc.SpriteFrameCache# */{
247249 @since v0.99.5
248250 */
249251 var textureFileName = texture ;
250- if ( ! textureFileName )
252+ if ( ! textureFileName )
251253 throw "cc.SpriteFrameCache.addSpriteFrames(): texture name should not be null" ;
252254 var gTexture = cc . TextureCache . getInstance ( ) . addImage ( textureFileName ) ;
253255
@@ -271,7 +273,7 @@ cc.SpriteFrameCache = cc.Class.extend(/** @lends cc.SpriteFrameCache# */{
271273 * @param {cc.SpriteFrame } frame
272274 * @param {String } frameName
273275 */
274- addSpriteFrame :function ( frame , frameName ) {
276+ addSpriteFrame : function ( frame , frameName ) {
275277 this . _spriteFrames [ frameName ] = frame ;
276278 } ,
277279
@@ -284,7 +286,7 @@ cc.SpriteFrameCache = cc.Class.extend(/** @lends cc.SpriteFrameCache# */{
284286 * In the long term: it will be the same.<br/>
285287 * </p>
286288 */
287- removeSpriteFrames :function ( ) {
289+ removeSpriteFrames : function ( ) {
288290 this . _spriteFrames = [ ] ;
289291 this . _spriteFramesAliases = [ ] ;
290292 this . _loadedFileNames = { } ;
@@ -294,7 +296,7 @@ cc.SpriteFrameCache = cc.Class.extend(/** @lends cc.SpriteFrameCache# */{
294296 * Deletes an sprite frame from the sprite frame cache.
295297 * @param {String } name
296298 */
297- removeSpriteFrameByName :function ( name ) {
299+ removeSpriteFrameByName : function ( name ) {
298300 // explicit nil handling
299301 if ( ! name ) {
300302 return ;
@@ -319,7 +321,7 @@ cc.SpriteFrameCache = cc.Class.extend(/** @lends cc.SpriteFrameCache# */{
319321 * </p>
320322 * @param {String } plist plist filename
321323 */
322- removeSpriteFramesFromFile :function ( plist ) {
324+ removeSpriteFramesFromFile : function ( plist ) {
323325 var fileUtils = cc . FileUtils . getInstance ( ) ;
324326 var path = fileUtils . fullPathForFilename ( plist ) ;
325327 var dict = fileUtils . dictionaryWithContentsOfFileThreadSafe ( path ) ;
@@ -336,7 +338,7 @@ cc.SpriteFrameCache = cc.Class.extend(/** @lends cc.SpriteFrameCache# */{
336338 * Removes multiple Sprite Frames from Dictionary.
337339 * @param {object } dictionary SpriteFrame of Dictionary
338340 */
339- _removeSpriteFramesFromDictionary :function ( dictionary ) {
341+ _removeSpriteFramesFromDictionary : function ( dictionary ) {
340342 var framesDict = dictionary [ "frames" ] ;
341343
342344 for ( var key in framesDict ) {
@@ -353,7 +355,7 @@ cc.SpriteFrameCache = cc.Class.extend(/** @lends cc.SpriteFrameCache# */{
353355 * </p>
354356 * @param {HTMLImageElement|HTMLCanvasElement|cc.Texture2D } texture
355357 */
356- removeSpriteFramesFromTexture :function ( texture ) {
358+ removeSpriteFramesFromTexture : function ( texture ) {
357359 for ( var key in this . _spriteFrames ) {
358360 var frame = this . _spriteFrames [ key ] ;
359361 if ( frame && ( frame . getTexture ( ) == texture ) ) {
@@ -374,7 +376,7 @@ cc.SpriteFrameCache = cc.Class.extend(/** @lends cc.SpriteFrameCache# */{
374376 * //get a SpriteFrame by name
375377 * var frame = cc.SpriteFrameCache.getInstance().getSpriteFrame("grossini_dance_01.png");
376378 */
377- getSpriteFrame :function ( name ) {
379+ getSpriteFrame : function ( name ) {
378380 var frame ;
379381 if ( this . _spriteFrames . hasOwnProperty ( name ) ) {
380382 frame = this . _spriteFrames [ name ] ;
@@ -396,15 +398,6 @@ cc.SpriteFrameCache = cc.Class.extend(/** @lends cc.SpriteFrameCache# */{
396398 }
397399 }
398400 return frame ;
399- } ,
400-
401- _valueForKey :function ( key , dict ) {
402- if ( dict ) {
403- if ( dict . hasOwnProperty ( key ) ) {
404- return dict [ key ] . toString ( ) ;
405- }
406- }
407- return "" ;
408401 }
409402} ) ;
410403
0 commit comments