5

我认为没有办法做到这一点,但是有没有办法检测 2 个 SKSpriteNodes 何时相互交叉,但仍然允许它们重叠,所以它们实际上不会相互反弹?

我知道我可以只有 1 没有物理体,然后编写一些代码来检查它们的坐标,但我想也许我可能在 Sprite Kit 中遗漏了一些东西,我可以用 SK 方法检测到这一点。

4

1 回答 1

10

您可以使用对象的contactDelegate属性SKPhysicsWorld

// inside your header file

typedef NS_OPTIONS(NSUInteger, CollisionCategory) {
    categoryOne = (1 << 0),
    categoryTwo = (1 << 1)
};

// inside your SKScene sub-class implementation

- (void)setupContactDelegate {
    self.physicsWorld.contactDelegate = self;

    nodeA.categoryBitMask = categoryOne;    // nodeA is category one
    nodeA.collisionBitMask = ~categoryTwo;  // nodeA does not collide w/ category two
    nodeA.contactTestBitMask = categoryTwo; // nodeA tests for contacts w/ category two

    nodeB.categoryBitMask = categoryTwo;    // nodeB is category two
    nodeB.collisionBitMask = ~categoryOne;  // nodeB does not collide w/ category one
    nodeB.contactTestBitMask = categoryOne; // nodeB tests for contacts w/ category one
}

- (void)didBeginContact:(SKPhysicsContact *)contact {
    // do whatever you need to do when the contact begins
}

- (void)didEndContact:(SKPhysicsContact *)contact {
    // do whatever you need to do when the contact ends
}

您还需要将您的SKScene子类声明为实现该SKPhysicsContactDelegate协议。

以下是更多参考信息:

于 2013-12-08T00:36:06.287 回答