1

首先我添加了

skView.showsPhysics = YES;

看物理体电路。

我有一个失去物理效果 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

它停止了工作。嗯……

我注释掉了将掩码分配给底部边缘 - 它有效。然后我分配给底部边缘另一个 - 球面罩 - 它不再起作用。

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

在此处输入图像描述

4

1 回答 1

1
bottom.physicsBody.categoryBitMask = bottomCategory;

这只会与包含该位bottom的物体接触/碰撞。contactBitMaskbottomCategory

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

ball.physicsBody.contactTestBitMask = ballCategory | bottomCategory;

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

于 2014-03-18T18:59:12.120 回答