如何让精灵响应接触事件而不是碰撞事件(SpriteKit)?
How to make sprites respond to contact events but not collision events (SpriteKit)?
是否可以让 Swift 中的精灵只响应接触事件,忽略碰撞事件?我们将其中一个 sprite 的 dynamic
属性 设置为 false
,但是当另一个 sprite 接触它时它没有触发 didBeginContact
方法。
换句话说,我们希望在另一个 sprite 接触到一个对象时在 didBeginContact
中收到通知,但我们不希望该 sprite 经历物理(例如,碰撞时不弹跳或移动)。
将两个精灵的 collisionbitmask 设置为 0。但是将 contacttestbitmask 设置为相反的 sprites categorybitmask
举个例子
这是我的 Power Up 的设置,这是一个没有表现出物理行为的物理体
self.physicsBody = SKPhysicsBody(rectangleOfSize: self.size)
self.physicsBody!.categoryBitMask = CategoryPowerup
self.physicsBody!.contactTestBitMask = CategoryShip
self.physicsBody!.collisionBitMask = 0
self.physicsBody!.dynamic = false
这是我的 Ship 的设置,它获得了 powerup
let physicsBodyInset = CGRectInset(CGRectMake(0, 0, self.size.width, self.size.height), 2, 2)
self.physicsBody = SKPhysicsBody(rectangleOfSize: physicsBodyInset.size)
self.physicsBody!.restitution = 0
self.physicsBody!.categoryBitMask = CategoryShip
是否可以让 Swift 中的精灵只响应接触事件,忽略碰撞事件?我们将其中一个 sprite 的 dynamic
属性 设置为 false
,但是当另一个 sprite 接触它时它没有触发 didBeginContact
方法。
换句话说,我们希望在另一个 sprite 接触到一个对象时在 didBeginContact
中收到通知,但我们不希望该 sprite 经历物理(例如,碰撞时不弹跳或移动)。
将两个精灵的 collisionbitmask 设置为 0。但是将 contacttestbitmask 设置为相反的 sprites categorybitmask
举个例子
这是我的 Power Up 的设置,这是一个没有表现出物理行为的物理体
self.physicsBody = SKPhysicsBody(rectangleOfSize: self.size)
self.physicsBody!.categoryBitMask = CategoryPowerup
self.physicsBody!.contactTestBitMask = CategoryShip
self.physicsBody!.collisionBitMask = 0
self.physicsBody!.dynamic = false
这是我的 Ship 的设置,它获得了 powerup
let physicsBodyInset = CGRectInset(CGRectMake(0, 0, self.size.width, self.size.height), 2, 2)
self.physicsBody = SKPhysicsBody(rectangleOfSize: physicsBodyInset.size)
self.physicsBody!.restitution = 0
self.physicsBody!.categoryBitMask = CategoryShip