忽略Cocos2D中具有相同碰撞组的对象之间的冲突

时间:2014-05-27 22:11:07

标签: cocos2d-iphone physics game-physics spritebuilder

我有一个收集陨石的基本火箭游戏。非常基本的。游戏工作得很好,除非有一个真正的烦恼,我一直试图解决但不能。

当火箭与陨石碰撞时:

-(void)ccPhysicsCollisionPostSolve:(CCPhysicsCollisionPair *)pair rocket:(CCNode *)nodeA meteorite:(CCNode *)nodeB{
[self meteoriteRemoved:nodeB];
[self spawnMeteorite];
score ++;
_scoreLabel.string = [NSString stringWithFormat:@"%d", score];
}

它被删除并重生。这样做很好,但是如果陨石靠近另一颗陨石并且火箭撞到一颗陨石,它会像斯诺克球一样撞击另一颗陨石。我希望它们保持静止,直到火箭与它们相撞。

有没有办法告诉同一个碰撞组中的精灵互相忽略?

编辑**

我在一个循环中加载陨石,这个类有:

@implementation Meteorite

- (void)didLoadFromCCB {
self.physicsBody.collisionType = @"meteorite";
}

@end

然后使用以下方法生成它们:

-(void)spawnMeteorite{
CCNode *meteorite = [CCBReader load:@"Meteorite"];

CGFloat randomX = ((double)arc4random() / ARC4RANDOM_MAX);
CGFloat randomY = ((double)arc4random() / ARC4RANDOM_MAX);
CGFloat rangeX = 320 - 48;
CGFloat rangeY = 2880 - 200;

meteorite.position = ccp((randomX * rangeX)+24, (randomY * rangeY)+ _ground.contentSize.height + _rocket.contentSize.height);
meteorite.physicsBody.velocity = ccp(0,0);
[_physicsNode addChild:meteorite];

}

以下代码在飞入一个群体时极为频繁地记录了陨石撞击的记录,其中大多数都被遗忘了!

-(void)ccPhysicsCollisionPostSolve:(CCPhysicsCollisionPair *)pair meteorite:(CCNode *)nodeA meteorite:(CCNode *)nodeB{
NSLog(@"Meteorite HIT");
}

感谢您对此进行调查,希望有所帮助

1 个答案:

答案 0 :(得分:1)

具有相同碰撞组的对象不会相互碰撞。 文档说明:

/**
 *  The body's collisionGroup, if two physics bodies share the same group id, they don't collide. Defaults to nil.
 */
@property(nonatomic, assign) id collisionGroup;

你能分享将碰撞组分配给物理对象的代码吗?你需要在这里小心,因为“相同”的碰撞组意味着指向同一个对象的完全相同的指针