【发布时间】:2018-11-13 15:20:59
【问题描述】:
我有一个游戏,其中两个球应该能够穿过作为终点线的第三个对象。两个球是SKShapeNodes,终点线是SKSpriteNode。它们都附有SKPhysicBodys,类别设置如下:
struct PhysicsCategory {
static let ball: UInt32 = 0x1 << 1
static let line: UInt32 = 0x1 << 2
}
ball.physicsBody = SKPhysicsBody(circleOfRadius: ballSize)
ball.physicsBody?.categoryBitMask = PhysicsCategory.ball
ball.physicsBody?.contactTestBitMask = PhysicsCategory.line
ball.physicsBody!.collisionBitMask = 1
line.physicsBody = SKPhysicsBody(rectangleOf: line.size)
line.physicsBody?.isDynamic = false
line.physicsBody?.categoryBitMask = PhysicsCategory.line
line.physicsBody?.contactTestBitMask = PhysicsCategory.ball
line.physicsBody!.collisionBitMask = 1
由于我希望球能够在不发生碰撞的情况下越过终点线,同时仍然能够收到有关此问题的通知,因此我将球和线的 collisionBitMask 设置为相同的值。
这给了我正在寻找的结果。然而,这似乎有一个副作用,即两个球也能够相互穿过,这是不应该发生的。
另外,如果我将collisionBitMask 的值设置为1 以外的任何值,球和线会相互碰撞。我已经阅读了 Apple 的相关文档,但我认为我在这里误解/遗漏了一些东西。
我的猜测是,因为两个球都认为对方拥有相同的collisionBitMask。重叠的发生是意料之中的。我不明白如何避免这种情况,而不必为每个球添加单独的类别。
谁能指出我正确的方向?如何让球通过终点线,同时又不能相互重叠?
【问题讨论】:
标签: swift sprite-kit skphysicsbody