【发布时间】:2014-06-17 11:05:59
【问题描述】:
我正在尝试创建一个带有可以移动的块的游戏,它们都属于同一个 categoryBitMask。除非我将physicsBody 设置为动态,否则 didBeginContact 不会触发。如何检测属于同一类别的两个块之间的碰撞?
生成块代码:
float blkX = 34;
float blkY = 64;
for (int i = 0; i < 4; i++) {
for (int j = 0; j < 6; j++){
block = [SKSpriteNode spriteNodeWithImageNamed:blocksArray[(arc4random()%5)]];
block.position = CGPointMake(blkX, blkY);
block.physicsBody = [SKPhysicsBody bodyWithRectangleOfSize:block.size];
block.physicsBody.usesPreciseCollisionDetection = YES;
block.physicsBody.dynamic = NO;
block.physicsBody.categoryBitMask = blockCategory;
block.physicsBody.contactTestBitMask = blockCategory;
block.physicsBody.collisionBitMask = blockCategory;
[block setName:@"block"];
[_bgLayer addChild:block];
blkX += 48;
}
blkX = 34;
blkY += 48;
}
我正在使用 SKPhysicsContactDelegate 并在我的 init 方法中有以下两行:
self.physicsWorld.contactDelegate = self;
self.physicsWorld.gravity = CGVectorMake(0.0, 0.0);
我的 didBeginContact 方法:
-(void)didBeginContact:(SKPhysicsContact *)contact{
SKPhysicsBody *firstBody, *secondBody;
firstBody = contact.bodyA;
secondBody = contact.bodyB;
NSLog(@"We Collided!");
}
任何帮助表示赞赏。谢谢!
【问题讨论】:
-
两个非动态物体永远不会产生接触事件。既然您已经弄清楚了,并且从您的评论中我认为它正在起作用,我想知道您的问题是什么?
标签: ios7 sprite-kit