【问题标题】:SpriteKit build rope function not workingSpriteKit构建绳索功能不起作用
【发布时间】:2017-04-15 15:16:21
【问题描述】:

这是我的代码:

 var red: SKSpriteNode?
var redHolding = false
/////
// MARK: didMove
/////
override func didMove(to view: SKView) {
    physicsWorld.contactDelegate = self

    if let r = self.childNode(withName: "red") as? SKSpriteNode { red = r }
    createRope(red!, 10)

}//

func createRope(_ anchorSprite: SKSpriteNode, _ numOfLinks: Int) {
    var links: [SKSpriteNode] = []
    anchorSprite.position = CGPoint(x: 0, y: 0)

    for i in 0...numOfLinks {
        let link = SKSpriteNode(color: UIColor.black, size: CGSize(width: 20, height: 30))
        link.position = CGPoint(x: anchorSprite.frame.midX, y: anchorSprite.frame.minY - link.frame.height/2)
        link.physicsBody? = SKPhysicsBody(rectangleOf: link.size)
        link.physicsBody?.isDynamic = true
        link.physicsBody?.allowsRotation = true
        link.physicsBody?.affectedByGravity = true
        link.physicsBody?.categoryBitMask = 4
        self.addChild(link)
        var joint = SKPhysicsJointPin()
        links.append(link)
        if i == 0 {
            joint = SKPhysicsJointPin.joint(withBodyA: anchorSprite.physicsBody!, bodyB: link.physicsBody!, anchor: CGPoint(x: anchorSprite.frame.midX, y: anchorSprite.frame.minY))
        } else {
            link.position = CGPoint(x: anchorSprite.frame.midX, y: (links[i-1].frame.minY - links[i-1].frame.height/2) - link.frame.height/2)
            joint = SKPhysicsJointPin.joint(withBodyA: links[i-1].physicsBody!, bodyB: links[i].physicsBody!, anchor: CGPoint(x: links[i-1].frame.minX, y: links[i-1].frame.minY))
        }
        physicsWorld.add(joint)
    }
}

我正在尝试构建一个以编程方式创建绳索的函数,到目前为止我可能还没有完成,但我遇到了一个问题,我不明白为什么。

我收到一个错误“在展开可选时意外发现 nil”

当我尝试制作关节时,“链接”变量及其物理体会发生这种情况。

我不明白为什么,我一直在四处移动以尝试修复它,但没有成功。

有人看到代码有什么问题吗?

感谢您的帮助。

【问题讨论】:

  • 你的anchorSpritephysicsBody吗?
  • 是的,我在 sks 文件中有它,我使用 if let 将它分配给一个变量。
  • 进行故障排除我试图打印链接的物理主体以查看它是否会打印,但是当我这样做时它在该行失败并出现相同的错误,所以我假设链接的物理身体是问题。
  • 我想我明白了。请参阅下面的答案。

标签: swift sprite-kit skphysicsbody skphysicsjoint


【解决方案1】:

您需要删除linkphysicsBody 属性之后的?

旧:

link.physicsBody? = SKPhysicsBody(rectangleOf: link.size)

新:

link.physicsBody = SKPhysicsBody(rectangleOf: link.size)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-02
    相关资源
    最近更新 更多