我有一个收集陨石的基本火箭游戏。非常基本的。游戏工作得很好,除非有一个真正的烦恼,我一直试图解决但不能。
当火箭与陨石碰撞时:
-(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");
}
感谢您对此进行调查,希望有所帮助
答案 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;
你能分享将碰撞组分配给物理对象的代码吗?你需要在这里小心,因为“相同”的碰撞组意味着指向同一个对象的完全相同的指针!