title: Cocos2d multipack sprite sheet animation example - How to load a multipack sprite sheet?
body: <p>I am new to Cocos2d and in the past 3 days have been trying to load a multipack sprite sheet animation.</p>
  
  <p>I was unable to find a tutorial or a working example and looked at <a href="http://raywenderlich.com" rel="nofollow">raywenderlich.com</a> and found this post which discusses single file sprite sheet animation: <a href="http://www.raywenderlich.com/32045/how-to-use-animations-and-sprite-sheets-in-cocos2d-2-x" rel="nofollow">Example 1</a></p>
  
  <p>This <a href="http://www.cocos2d-iphone.org/forums/topic/animation-loading-and-animating-multiple-spritesheets/" rel="nofollow">Example 2</a> does not work as well:</p>
  
  <p>So how to load a multipack sprite sheet?</p>
  
  <p>Thanks</p>
  
  <p>I added my code which works partially. The problems are:
  1) The files -ipadhd and -hd are not recognised as expected (in other animations they are recognised so the settings in AppDelegate is Ok)
  2) When multipack animation is loaded I get an Exception
  File example:apple0.png, apple0.plist, apple0-hd.png ,apple0-hd.plist, apple1-hd.png, apple1-hd.plist, apple0-ipadhd.png, apple0-ipadhd.plist, apple1-ipadhd.png, apple1-ipadhd.plist</p>
  
  <pre><code>        NSFileManager *fileManager = [NSFileManager defaultManager];
          BOOL exists = YES;
          int plistIndex = -1;
          int tmpPlistIndex;
          NSMutableArray *availablePLists = [NSMutableArray array];
  
          NSMutableArray *imageFrames = [NSMutableArray array];
          NSMutableArray *spriteSheets = [NSMutableArray array];
          frameCount = 0;
  
          do {
              plistIndex +=1;
              NSString* plistFileName = [NSString stringWithFormat:@"%d%@",plistIndex,item.fileName];
  
              plistFileName = [[NSBundle mainBundle] pathForResource:plistFileName ofType:@"plist"];
  
  
  
              plistPath = plistFileName;
              [availablePLists addObject:plistPath];
              plistDict = [[NSDictionary alloc] initWithContentsOfFile:plistPath];
              frames = [plistDict objectForKey:@"frames"];
              frameCount += frames.count;
  
              tmpPlistIndex = plistIndex + 1;
              plistFileName = [NSString stringWithFormat:@"%d%@",tmpPlistIndex,item.fileName];
              plistFileName = [[NSBundle mainBundle] pathForResource:plistFileName ofType:@"plist"];
  
              exists = [fileManager fileExistsAtPath:plistFileName];
  
          } while (exists);
  
  
          NSLog(@"frame count is: %d",frameCount);
  
          plistIndex = -1;
          exists = YES;
  
          for(NSString *availablePList in availablePLists)
          {
              plistIndex += 1;
  
  
              plistDict = [[NSDictionary alloc] initWithContentsOfFile:availablePList];
  
              NSLog(@"PLIST FILE NAME = %@",availablePList );
  
              frames = [plistDict objectForKey:@"frames"];
              [[CCSpriteFrameCache sharedSpriteFrameCache] addSpriteFramesWithFile:availablePList];
              NSString* imageFileName = [NSString stringWithFormat:@"%d%@.png",plistIndex,item.fileName];
              //  NSDictionary* metadata = [plistDict objectForKey:@"metadata"];
              // NSString* imageFileName = [metadata objectForKey:@"realTextureFileName"];
  
              CCSpriteBatchNode *spriteSheet = [CCSpriteBatchNode batchNodeWithFile:imageFileName];
  
              [self addChild:spriteSheet z:100];
              item.spriteSheet = spriteSheet;
  
              [spriteSheets addObject:spriteSheet];
  
              for (int i=0; i&lt;frameCount; i++) {
                  NSString * fileToLoad;
  
                  if(i&lt;10){
                      fileToLoad = [NSString stringWithFormat:@"%@/000%d",item.fileName,i];
                  }
                  else if (i&lt;100){
                      fileToLoad = [NSString stringWithFormat:@"%@/00%d",item.fileName,i];
                  }
                  else{
                      fileToLoad = [NSString stringWithFormat:@"%@/0%d",item.fileName,i];
                  }
  
  
                  if ([frames objectForKey:fileToLoad]){
                      NSLog(@"Found : %@",fileToLoad);
                      [imageFrames addObject:
                       [[CCSpriteFrameCache sharedSpriteFrameCache] spriteFrameByName:fileToLoad]];
                  }
  
              }
  
  
          }//End available plists
  
  
  
          item.spriteAnimation = [CCAnimation animationWithSpriteFrames:imageFrames delay:0.1f];
          NSString* spriteImageName = [NSString stringWithFormat:@"%@/0000",item.fileName];
          NSLog(@"IMAGE LOADING spriteImageName : %@",spriteImageName);
          item.sprite = [CCSprite spriteWithSpriteFrameName:spriteImageName];
          NSLog(@"IMAGE LOADED spriteImageName : %@",spriteImageName);
          CGPoint point = item.itemInfo.position;//info.position;
          CGPoint pointScaled = [self scalePoint:point];
          item.sprite.position =  pointScaled;
          NSLog(@"POS name-%@ pos (%f, %f)",item.name,item.sprite.position.x,item.sprite.position.y);
          item.sprite.anchorPoint=ccp(0, 0);
  
          for(CCSpriteBatchNode* spriteSheet in spriteSheets){
  
              //[spriteSheet addChild:item.sprite];
              [self  addChild:item.sprite];
  
          }
  </code></pre>