2017-04-15 25 views
1

这里是我的代码:SpriteKit构建绳子功能不能正常工作

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) 
    } 
} 

我试图建立一个程序创建一个绳子功能,我可以的路要走,到目前为止,但我有一个问题我不明白为什么。

我得到一个错误“意外发现零而展开可选”

它发生了,其物理体“链接”变量时,我尽量让联合。

我不明白为什么和我一直在动,试图解决它没有成功。

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

感谢您的任何帮助。

+0

贵'anchorSprite'有'physicsBody'? – nathan

+0

是的,我把它放在sks文件中,我用一个if让它把它分配给一个变量。 – Discoveringmypath

+0

排除故障我试图打印链接的物理主体以查看它是否会打印,但是当我这样做时,它会在该行上出现相同的错误,因此我假设链接的物理主体是问题。 – Discoveringmypath

回答

3

您需要删除linkphysicsBody属性后的?

老:

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

新:

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

该死的哈哈。谢谢,就是这样! noob失败... :) – Discoveringmypath