2017-04-15 32 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