我有一个物体与另外两个物体发生碰撞。我根据相关的碰撞对象更改恢复原状。每当恢复原状从0.5变为0时,不会立即识别,当恢复原状被假定为零时,这会导致短暂的弹性。如何立即识别/影响更改?请参阅下面的代码:
func didBegin(_ contact: SKPhysicsContact) {
var firstBody : SKPhysicsBody
var secondBody : SKPhysicsBody
if contact.bodyA.categoryBitMask < contact.bodyB.categoryBitMask {
firstBody = contact.bodyA
secondBody = contact.bodyB
}
else {
firstBody = contact.bodyB
secondBody = contact.bodyA
}
if firstBody.categoryBitMask == spriteCategory && secondBody.categoryBitMask == enemyCategory1 {
var spriteContactNode = firstBody.node
spriteContactNode?.physicsBody?.restitution = 0.5
self.physicsWorld.gravity = CGVector(dx: 0, dy: -2.0)
}
if firstBody.categoryBitMask == spriteCategory && secondBody.categoryBitMask == enemyCategory2 {
var spriteContactNode = firstBody.node
spriteContactNode?.physicsBody?.restitution = 0
self.physicsWorld.gravity = CGVector(dx: 0, dy: -0.5)
}
}
答案 0 :(得分:0)
我不相信你想要做的事情会起作用。恢复会影响一段时间,就好像节点有一个重复几次的动作。
尝试将节点isDynamic
属性更改为false。
var spriteContactNode = firstBody.node
spriteContactNode?.physicsBody?.isDynamic = false
spriteContactNode?.physicsBody?.restitution = 0
self.physicsWorld.gravity = CGVector(dx: 0, dy: -0.5)
spriteContactNode?.physicsBody?.isDynamic = true
然后将其重新设置为true可能足以让在弹力下降之前只弹跳一次。