I try to detect Collision of two sprites as follows ... but when I try to start the game, no collisions occur .... what am I possibly mistaken?
- (void)update:(ccTime)dt { CGRect projectileRect = CGRectMake(projectile.position.x - (projectile.contentSize.width/2), projectile.position.y - (projectile.contentSize.height/2), projectile.contentSize.width, projectile.contentSize.height);
}
The projectile sprite is animated from the top of the screen and the monkey sprite is animated from left to right at the bottom, the projectile goes through the monkey, but the log does not work out caused ???
- (void)update:(ccTime)dt { CGRect projectileRect = [projectile boundingBox]; CGRect targetRects = [_monkey boundingBox]; if (CGRectIntersectsRect(projectileRect, targetRects)) { NSLog(@"ha ha Collision detected"); } CGRect projectileRects = CGRectMake(projectile.position.x - (projectile.contentSize.width/2), projectile.position.y - (projectile.contentSize.height/2), projectile.contentSize.width, projectile.contentSize.height); CGRect targetRect = CGRectMake(_monkey.position.x - (_monkey.contentSize.width/2), _monkey.position.y - (_monkey.contentSize.height/2), _monkey.contentSize.width, _monkey.contentSize.height); if (CGRectIntersectsRect(projectileRects, targetRect)) { NSLog(@"@@@@@@@@@@@@@@@@@@@@@@@@@@@@"); }
}
- (void) spriteMoveFinished: (id) sender {
//NSLog(@"spriteMoveFinished"); CCSprite *sprite = (CCSprite *)sender; [self removeChild:sprite cleanup:YES]; if (sprite.tag == 1) { [_targets removeObject:sprite]; } else if (sprite.tag == 2) { [_projectiles removeObject:sprite]; }
}
- (void) addTarget {
projectile = [CCSprite spriteWithFile:@"egg.png" rect:CGRectMake(0, 0, 10, 10)]; projectile.position = ccp(_bear.position.x,_bear.position.y-20); projectile.tag=2; [self addChild:projectile]; CGPoint realDest = ccp(_bear.position.x, _bear.position.y - 380); int minDuration = 2.0; int maxDuration = 4.0; int rangeDuration = maxDuration - minDuration; int actualDuration = (arc4random() % rangeDuration) + minDuration;
}
-(void) registerWithTouchDispatcher { [[CCTouchDispatcher sharedDispatcher] addTargetedDelegate:self priority:0 swallowsTouches:YES]; }
- (BOOL) ccTouchBegan: (UITouch *) touch withEvent: (UIEvent *) event {
CGPoint touchLocation = [self convertTouchToNodeSpace:touch]; if(CGRectContainsPoint(CGRectMake(0,0,320,50),touchLocation)) { if (![_walkMonkey isDone]) { [_monkey runAction:_walkMonkey]; } } else { } return YES;
}
- (void) ccTouchEnded: (UITouch *) touch withEvent: (UIEvent *) event {
CGPoint touchLocation = [self convertTouchToNodeSpace:touch]; if(CGRectContainsPoint(CGRectMake(0,0,320,50),touchLocation)) { [_monkey stopAction:_walkMonkey]; }
}
- (void)ccTouchMoved:(UITouch *)touch withEvent:(UIEvent *)event { CGPoint touchLocation = [self convertTouchToNodeSpace:touch]; CGPoint oldTouchLocation = [touch previousLocationInView:touch.view]; oldTouchLocation = [[CCDirector sharedDirector] convertToGL:oldTouchLocation]; oldTouchLocation = [self convertToNodeSpace:oldTouchLocation]; CGPoint translation = ccpSub(touchLocation, oldTouchLocation); if (translation.x > 3) { _monkey.flipX=YES; } else if (translation.x < -3){ _monkey.flipX=NO; } if(CGRectContainsPoint(CGRectMake(40,0,240,50),touchLocation)) { CGPoint newPos = ccpAdd(translation,_monkey.position); if(newPos.x >= 320 || newPos.x <= 20) { NSLog(@"monkey not walking"); } else { newPos.y = 100; _monkey.position = newPos; } } }