Projectile immediately intersecting with target I have a fairly simple and somewhat cookie cutter method for testCollisions (FYI BasicProjectile is a CCNode with a CCSprite member). for (BasicProjectile basicProjectile in self.projectiles) NSLog( "projectile sprite ",NSStringFromCGRect(basicProjectile.sprite.boundingBox)) NSLog( "destination sprite ",NSStringFromCGRect(basicProjectile.destination.sprite.boundingBox)) if (CGRectIntersectsRect(basicProjectile.sprite.boundingBox, basicProjectile.destination.sprite.boundingBox)) basicProjectile.destination setHealth (basicProjectile.destination.hp basicProjectile.damage) self.projectiles removeObject basicProjectile self removeChild basicProjectile cleanup YES Those NSLog statements output 2013 03 23 10 02 59.124 GridWars 25268 c07 projectile sprite 10, 10 , 20, 20 2013 03 23 10 02 59.124 GridWars 25268 c07 destination sprite 13.5, 34 , 27, 68 The main problem is that the collision immediately happens. It should take a few frames to travel from the source to the destination. So although the logic of setting the health works fine the sprite itself is never seen on the screen because the very second its fired it is removed. From what I understand about CGRectIntersectsRect those 2 points listed above do not intersect. Am I wrong are they intersecting? What can be causing these projectiles to immediately intersect with their target? BasicProjectile class (CCNODE superclass) (id)initWithSourceAndDestination (GameCharacters )Source destination (GameCharacters )Destination if (self super init ) self.damage 25 self.sprite CCSprite spriteWithFile "Projectile.png" self addChild self.sprite z 1000 self.source Source self.destination Destination return self GameCharacters would look similar to this except have health and mana properties. WizardHero Class, Method Fire basicProjectile.position self.position self.hostLayer addChild basicProjectile z 2021 Determine where we wish to shoot the projectile to int realX Are we shooting to the left or right? CGPoint diff ccpSub(basicProjectile.destination.position, basicProjectile.source.position) if (diff.x gt 0) realX (self.hostLayer.tileMap.mapSize.width self.hostLayer.tileMap.tileSize.width) (basicProjectile.contentSize.width 2) else realX (self.hostLayer.tileMap.mapSize.width self.hostLayer.tileMap.tileSize.width) (basicProjectile.contentSize.width 2) float ratio (float) diff.y (float) diff.x int realY ((realX basicProjectile.position.x) ratio) basicProjectile.position.y CGPoint realDest ccp(realX, realY) Determine the length of how far we're shooting int offRealX realX basicProjectile.position.x int offRealY realY basicProjectile.position.y float length sqrtf((offRealX offRealX) (offRealY offRealY)) float velocity 380 1 380pixels 1sec float realMoveDuration length velocity Move projectile to actual endpoint id actionMoveDone CCCallFuncN actionWithTarget self.hostLayer selector selector(projectileMoveFinished ) basicProjectile runAction CCSequence actionOne CCMoveTo actionWithDuration realMoveDuration position realDest two actionMoveDone self.hostLayer.projectiles addObject basicProjectile Basically here is the class structure Three main superclasses GameProjectiles CCNodes GameLevels CCNodes GameChars CCNodes Then the actual more specific classes (used on the GameLevels) BasicProjectile GameProjectiles Level1Layer GameLevels WizardHero GameCharacters RedEnemy GameCharacters