2016-03-04 16 views
0

我正在遵循Swift 2中爲Xcode 7編寫的教程,其中的第1部分(您可以導航到第四部分,我的問題已經出現)是這裏:http://www.mav3r1ck.io/spritekit-with-swift/ 我用我自己的精靈來代替教程中的那些精靈。當我運行我的代碼,在以下從xcode 7中的教程構建項目swift 2,遇到未解決的標識符

let spawnRandomHead = SKAction.runBlock(spawnHead) 
    let waitTime = SKAction.waitForDuration(1.0) 
    let sequence = SKAction.sequence([spawnRandomHead,waitTime]) 
    runAction(SKAction.repeatActionForever(sequence)) 

完整的第一行代碼中出現的錯誤是在這裏:

import SpriteKit 

class GameScene: SKScene, SKPhysicsContactDelegate { 

enum bitMask: UInt32 { 
    case defender = 1 
    case head = 2 
    case frame = 4 
} 


let defender = SKSpriteNode(imageNamed: "Ivanovic is a boss") 



override func didMoveToView(view: SKView) { 
    /* Setup your scene here */ 
    backgroundColor = UIColor.blueColor() 
    defender.position = CGPoint(x: frame.size.width/2, y:frame.size.height/2) 
    defender.physicsBody = SKPhysicsBody(texture: defender.texture!, size: defender.frame.size) 
    defender.physicsBody?.dynamic = false 
    defender.physicsBody?.affectedByGravity = false 
    defender.physicsBody?.allowsRotation = false 
    defender.physicsBody?.categoryBitMask = bitMask.head.rawValue 
    defender.physicsBody?.contactTestBitMask = bitMask.head.rawValue 
    defender.physicsBody?.collisionBitMask = 0 
    addChild(defender) 

    let spawnRandomHead = SKAction.runBlock(spawnHead) 
    let waitTime = SKAction.waitForDuration(1.0) 
    let sequence = SKAction.sequence([spawnRandomHead,waitTime]) 
    runAction(SKAction.repeatActionForever(sequence)) 

    physicsWorld.contactDelegate = self 
    physicsWorld.gravity = CGVectorMake(0.0, -0.9) 

    defender.physicsBody?.contactTestBitMask = bitMask.frame.rawValue 
    defender.physicsBody?.collisionBitMask = bitMask.frame.rawValue 

     } 

override func touchesBegan(touches: Set<UITouch>, withEvent event: UIEvent?) { 
    let touch = touches.first! as UITouch 
    let touchLocation = touch.locationInNode(self) 
    //print(touchLocation) 

    let moveTo = SKAction.moveTo(touchLocation, duration: 1.0) 
    defender.runAction(moveTo) 


    func randomNumber(min min: CGFloat, max: CGFloat) -> CGFloat { 
     let random = CGFloat(Float(arc4random())/0xFFFFFFFF) 
     return random * (max - min) + min 
    } 

    func spawnHead() { 

     let head = SKSpriteNode(imageNamed: "The Biter Strikes") 
     head.position = CGPoint(x: frame.size.width * randomNumber(min: 0, max: 1), y: frame.size.height + head.size.height) 
     head.physicsBody = SKPhysicsBody(texture: head.texture!, size: head.frame.size) 
     head.physicsBody?.categoryBitMask = bitMask.head.rawValue 
     head.physicsBody?.contactTestBitMask = bitMask.defender.rawValue 
     addChild(head) 


    } 
    func didBeginContact(contact: SKPhysicsContact) { 
     let contactMask = contact.bodyA.categoryBitMask | contact.bodyB.categoryBitMask 

     switch(contactMask) { 
     case bitMask.defender.rawValue | bitMask.head.rawValue: 
      let secondNode = contact.bodyB.node 
      secondNode?.physicsBody?.allowsRotation = true 
      let firstNode = contact.bodyA.node 
      firstNode?.physicsBody?.allowsRotation = true 
      firstNode?.removeFromParent() 

     default: 
      return 
     } 


    } 


} 
} 

我試圖清理&重建,重新啓動的Xcode,動人的章節周圍的代碼,但錯誤不會消失。我感謝您的支持!

嗯。試了兩個。現在,在第二行此

  let spawnRandomHead = SKAction.runBlock({ [unowned self]() -> Void in 
     self.spawnHead() 
     }) 
    let waitTime = SKAction.waitForDuration(1.0) 
    let sequence = SKAction.sequence([spawnRandomHead,waitTime]) 
    runAction(SKAction.repeatActionForever(sequence)) 

一個新的錯誤彈出說「價值型‘GameScene’沒有成員‘spawnHead’」。

回答

0

runBlock需要閉合作爲參數,所以更換

let spawnRandomHead = SKAction.runBlock(spawnHead) 

let spawnRandomHead = SKAction.runBlock({ [unowned self]() -> Void in 
    self.spawnHead() 
}) 

或簡單地

let spawnRandomHead = SKAction.runBlock { [unowned self] in 
    self.spawnHead() 
} 
相關問題