从xcode 7 swift 2中的教程构建项目,遇到未解析的标识符

时间:2016-03-04 00:17:21

标签: swift2 xcode7

我正在按照Swift 2中为Xcode 7编写的教程,其中第1部分(您可以导航到我的问题出现的第IV部分)在这里:http://www.mav3r1ck.io/spritekit-with-swift/ 我使用自己的精灵代替教程中的精灵。当我运行我的代码时,以下

的第一行会出现错误
    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
        }


    }


}
}

我试过清洁&amp;重建,重新启动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))

弹出一个新错误&#34;类型的价值&#39; GameScene&#39;没有会员&#39; spawnHead&#39; &#34;

1 个答案:

答案 0 :(得分: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()
}