title: Pixel perfect collision not working if more than two sprites(from spritesheet) appears on scene iphone?
body: <p>I'm developing game in iPhone in that pixel perfect collision will work only if  one sprite appears on scene otherwise it wont work.can you please provide me some information?</p>
  
  <p>I used this code for pixel perfect collision between animated sprites(spritesheet).</p>
  
  <pre><code> -(BOOL) isCollisionBetweenSpriteA:(CCSprite*)spr1 spriteB:(CCSprite*)spr2 pixelPerfect:(BOOL)pp
  
  
    {
  
  BOOL isCollision = NO;
  
  CGRect intersection = CGRectIntersection([spr1 boundingBox], [spr2 boundingBox]);
  
  // Look for simple bounding box collision
  if (!CGRectIsEmpty(intersection))
  {
      // If we're not checking for pixel perfect collisions, return true
      if (!pp) {return YES;}
  
      CGPoint spr1OldPosition = spr1.position;
      CGPoint spr2OldPosition = spr2.position;
  
      spr1.position = CGPointMake(spr1.position.x - intersection.origin.x, spr1.position.y - intersection.origin.y);
      spr2.position = CGPointMake(spr2.position.x - intersection.origin.x, spr2.position.y - intersection.origin.y);
  
      intersection = CGRectIntersection([spr1 boundingBox], [spr2 boundingBox]);
  
      // Assuming that the spritebatchnode of both sprites is the same, I just use one. If each sprite has a different sprite batch node as parent you should modify the code to get the spriteBatchNode for each sprite and visit them.
      CCSpriteBatchNode* _sbnMain =(CCSpriteBatchNode*) spr1.parent;
  
      //NOTE: We are assuming that the spritebatchnode is always at 0,0
  
      // Get intersection info
      unsigned int x = (intersection.origin.x)* CC_CONTENT_SCALE_FACTOR();
      unsigned int y = (intersection.origin.y)* CC_CONTENT_SCALE_FACTOR();
      unsigned int w = intersection.size.width* CC_CONTENT_SCALE_FACTOR();
      unsigned int h = intersection.size.height* CC_CONTENT_SCALE_FACTOR();
      unsigned int numPixels = w * h;// * CC_CONTENT_SCALE_FACTOR();
  
      // create render texture and make it visible for testing purposes
      int renderWidth = w+1;
      int renderHeight = h+1;
  
      if(renderWidth&lt;32)
      {
          renderWidth =32;
      }
  
      if(renderHeight &lt; 32)
      {
          renderHeight =32;
      }
  
      renderTexture = [[CCRenderTexture alloc] initWithWidth:renderWidth height:renderHeight pixelFormat:kCCTexture2DPixelFormat_RGBA8888];
  
      //rt is always going to be at 0,0 - can't change it.
      renderTexture.position = CGPointMake(0, 0);
      [self addChild:renderTexture];
      renderTexture.visible = NO;
  
      //NSLog(@"\nintersection = (%u,%u,%u,%u), area = %u",x,y,w,h,numPixels);
  
      // Draw into the RenderTexture
      [renderTexture beginWithClear:0 g:0 b:0 a:0];
  
      // Render both sprites: first one in RED and second one in GREEN
      glColorMask(1, 0, 0, 1);
      [_sbnMain visitSprite:spr1];
      glColorMask(0, 1, 0, 1);
      [_sbnMain visitSprite:spr2];
      glColorMask(1, 1, 1, 1);
  
      // Get color values of intersection area
      ccColor4B *buffer = malloc( sizeof(ccColor4B) * numPixels );
      glReadPixels(x, y, w, h, GL_RGBA, GL_UNSIGNED_BYTE, buffer);
  
      [renderTexture end];
  
      // Read buffer
      unsigned int step = 1;
      for(unsigned int i=0; i&lt;numPixels; i+=step)
      {
          ccColor4B color = buffer[i];
  
          if (color.r &gt; 0 &amp;&amp; color.g &gt; 0)
          {
              isCollision = YES;
              break;
          }
      }
      // Free buffer memory
      free(buffer);
      spr1.position = spr1OldPosition; 
      spr2.position = spr2OldPosition;
  
      [renderTexture release];
      [self removeChild:renderTexture cleanup:YES];
  } return isCollision;}
  </code></pre>