我在碰撞检测中遇到问题(我正在使用cocos2d,而不是box2D或Chipmunk)。基本上,我有玩家,这是一个CCSprite,和投射物,也CCSprite。使用CGRectIntersectRect到目前为止一切正常,但在游戏中,玩家可以启动超级激光厄运,这总是在玩家面前。我将它加入的方式是将其作为玩家的孩子添加,因此我没有任何其他代码可以处理旋转或移动等东西。但是我遇到的问题是,它没有正确检测到与弹丸的碰撞,因为激光的位置总是0,0,因为它被添加到了玩家而不是场景中。Cocos2D简单碰撞检测一个精灵,另一个精灵的子女
这里是我的代码:
Player.m
- (bool) activateSuper{
bool activated = NO;
if (powerReady) {
NSLog(@"Super Activated!!!!!");
activated = YES;
_state = pSuper;
//Super sprite which is supposed to collide with projectiles
_sprSuper = [CCSprite spriteWithSpriteFrameName:@"Laser.png"];
_sprSuper.anchorPoint = ccp(0.5, 0.0);
_sprSuper.position = ccp(self.contentSize.width/2, self.contentSize.height);
[self addChild:_sprSuper];
//Delete
int duration = 5;
[self runAction:[CCSequence actionOne:[CCDelayTime actionWithDuration:duration]
two:[CCCallBlock actionWithBlock:^{
[self removeChild:_sprSuper cleanup:YES];
powerReady = NO;
curSuper = 0;
_state = pOK;
}]]];
//Empty super bar
GameScene *g = (GameScene*)[self parent];
[g.gameHUD emptyBar:duration];
}
return activated;
}
在GameScene.m(碰撞检测):
- (void) update:(ccTime)dt{
Projectile *pToRemove = nil;
for (Projectile *p in projectiles){
if (player.state == pSuper && CGRectIntersectsRect(p.boundingBox, player.sprSuper.boundingBox)) {
pToRemove = p;
break;
}
}
if (pToRemove != nil) [self destroyProjectile:pToRemove];
}
那你觉得我应该集中上?有没有一种简单的方法来检测碰撞,还是应该在场景中添加激光并添加代码以使其随播放器一起移动?
非常感谢您的回答!
我跟着你的第二个选择,它像一个魅力工作,非常感谢你! :d – RaphBlanchet 2013-03-24 07:24:34