小编sil*_*vie的帖子

SKSpriteNode子类:删除所有关节的方法

我创建了一个SKSpriteNode的子类.我将该类的实例与SKPhysicsJointLimit类型的关节连接在一起.我在我的GameScene中的didEndContact(联系方式:SKPhysicsContact)中执行此操作:

var joint = SKPhysicsJointLimit.jointWithBodyA(contact.bodyA, bodyB: contact.bodyB, anchorA: pos1!, anchorB: pos2!)
self.physicsWorld.addJoint(joint)
Run Code Online (Sandbox Code Playgroud)

这到目前为止运作良好.然后我来到了我想要从关节中释放节点的地步.根据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)
            }
        }
    }
Run Code Online (Sandbox Code Playgroud)

在println()语句之后调用该方法失败,并显示消息"Swift dynamic cast failed".我非常感谢您对如何使用SKPhysicsBody的联合财产的看法.更具体地说:如何使用(强制转换)数组中的项目,以便能够从场景的SKPhysicsWorld中删除它们.

ios sprite-kit skphysicsbody skphysicsjoint swift

6
推荐指数
1
解决办法
807
查看次数

标签 统计

ios ×1

skphysicsbody ×1

skphysicsjoint ×1

sprite-kit ×1

swift ×1