SpriteKit physicsBody效果丢失了

时间:2014-03-18 17:39:13

标签: ios sprite-kit skphysicsbody

首先我添加了

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

它停止了工作。唔...

我注意到将遮罩分配到底边 - 它可以工作。 然后我分配到另一个底边 - 球面罩 - 它不再起作用。

我想,我在文档中遗漏了一些东西,但现在我找不到答案为什么会发生。

enter image description here

1 个答案:

答案 0 :(得分:1)

bottom.physicsBody.categoryBitMask = bottomCategory;

这使bottom仅与contactBitMask包含bottomCategory位的实体联系/碰撞。

因此,如果您将此类别添加到您的球中,它们应该再次与底部碰撞:

ball.physicsBody.contactTestBitMask = ballCategory | bottomCategory;

有关详细信息,请参阅Box2D manual 第7.2章 - 过滤