我创建了一个SKSpriteNode的子类。我使用类型为SKPhysicsJointLimit的连接将该类的实例连接在一起。我在我的GameScene中的didEndContact(contact: SKPhysicsContact)函数中实现这个功能。
var joint = SKPhysicsJointLimit.jointWithBodyA(contact.bodyA, bodyB: contact.bodyB, anchorA: pos1!, anchorB: pos2!)
self.physicsWorld.addJoint(joint)
这目前运作得很好。然后我到了想要释放节点与关节的点上。根据SKPhysicsBody文档,有一个名为“joints”的属性,它是一个包含SKPhysicsJoint对象的数组。 我认为这正是我需要的,但我无法迭代实例的关节并将它们从physicsWorld中删除。为了完成这项工作,我在我的自定义SKSpriteNode子类中添加了一个方法。
func freeJoints(world: SKPhysicsWorld){
if let joints = self.physicsBody?.joints {
for joint in joints{
println("found a joint: \(joint)")
// example print:
//found a joint: <PKPhysicsJointRope: 0x7fbe39e95c50>
world.removeJoint(joint as SKPhysicsJoint)
}
}
}
调用方法在println()语句后失败,并显示消息“Swift dynamic cast failed”。我真的很希望您能就如何使用SKPhysicsBody的joint属性提供建议。更具体地说:如何使用(转换?)数组中的项以便能够从场景的SKPhysicsWorld中删除它们。