我在碰撞檢測中遇到問題(我正在使用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