首先我添加了
skView.showsPhysics = YES;
看物理体电路。
BUT
我有失去物理效果O_o的问题... 我的球受到重力的影响而摔倒了。
// Ball
self.physicsBody = [SKPhysicsBody bodyWithCircleOfRadius:self.size.height/2];
self.physicsBody.categoryBitMask = ballCategory;
self.physicsBody.contactTestBitMask = bottomCategory;
此外,我创建了底边的物理身体来获取碰撞信息:
// Bottom edge
CGRect bottomRect = CGRectMake(self.frame.origin.x, self.frame.origin.y + 25, self.frame.size.width, 10);
SKNode* bottom = [SKNode node];
bottom.physicsBody = [SKPhysicsBody bodyWithEdgeLoopFromRect:bottomRect];
[self addChild:bottom];
在我将bitMask添加到底边之前正确地相互交互
bottom.physicsBody.categoryBitMask = bottomCategory;
bottom.physicsBody.collisionBitMask = ballCategory;
口罩:
static const uint32_t ballCategory = 0x1 << 0; // 00000000000000000000000000000001
static const uint32_t bottomCategory = 0x1 << 1; // 00000000000000000000000000000010
它停止了工作。唔...
我注意到将遮罩分配到底边 - 它可以工作。 然后我分配到另一个底边 - 球面罩 - 它不再起作用。
我想,我在文档中遗漏了一些东西,但现在我找不到答案为什么会发生。
答案 0 :(得分:1)
bottom.physicsBody.categoryBitMask = bottomCategory;
这使bottom
仅与contactBitMask
包含bottomCategory
位的实体联系/碰撞。
因此,如果您将此类别添加到您的球中,它们应该再次与底部碰撞:
ball.physicsBody.contactTestBitMask = ballCategory | bottomCategory;
有关详细信息,请参阅Box2D manual 第7.2章 - 过滤。