swift - 使用 waitforduration 函数时出错

标签 swift sprite-kit

import SpriteKit

class GameScene: SKScene {


var greenBall = SKSpriteNode(imageNamed: "greenball")
 var redBall = SKSpriteNode(imageNamed: "redball")


override func didMoveToView(view: SKView) {

let borderBody = SKPhysicsBody(edgeLoopFromRect: self.frame)
    borderBody.friction = 0
    self.physicsBody = borderBody

 backgroundColor = SKColor.purpleColor()




    //
    var bar0 = SKSpriteNode(imageNamed: "bar0")
     var bar1 = SKSpriteNode(imageNamed: "bar1")
     var bar2 = SKSpriteNode(imageNamed: "bar2")
     var bar3 = SKSpriteNode(imageNamed: "bar3")
     var bar4 = SKSpriteNode(imageNamed: "bar4")
     var bar5 = SKSpriteNode(imageNamed: "bar5")

   var bars = SKSpriteNode(imageNamed: "bar\(arc4random_uniform(6))")




    var bartest = SKSpriteNode(imageNamed: "bar0")
    bartest.position = CGPoint(x: frame.midX, y: frame.size.height * 0.633)
    addChild(bartest)







    var barra = SKShapeNode(rectOfSize: CGSize(width: frame.size.width, height: 10))
    barra.name = "bar"
    barra.fillColor = SKColor.whiteColor()
    barra.position = CGPoint(x: frame.midX, y: frame.midY)




    greenBall.position = CGPoint(x: frame.midX-100, y: frame.midY)
    greenBall.yScale = 2
    greenBall.xScale = 2

    redBall.position = CGPoint(x: frame.midX+100, y: frame.midY)
    redBall.yScale = 2
    redBall.xScale = 2


    self.addChild(redBall)
    self.addChild(greenBall)
    self.addChild(barra)




    func makeBars() {

        var randomTopOrBot = arc4random_uniform(2)
        if randomTopOrBot == 0 {

            var MaxY = frame.size.height * 0.951
            var MinY = (frame.size.height * 0.633)-bars.size.height
            var Range = CGFloat(MaxY - MinY)
            var barsSpawnX = (frame.midX)
            var barSpawnY =  CGFloat(arc4random_uniform(UInt32(Range)))
            bars.position = CGPoint(x: frame.midX, y: barSpawnY)
            addChild(bars)

        } else {

            var MaxY = frame.size.height * 0.951
            var MinY = (frame.size.height * 0.633)-bars.size.height
            var Range = CGFloat(MaxY - MinY)
            var barsSpawnX = (frame.midX)
            var randomBetweenRange =  CGFloat(arc4random_uniform(UInt32((Range))))
            bars.position = CGPoint(x: frame.midX, y: (MinY+randomBetweenRange))
            println(frame.size.height * 0.633)
            addChild(bars)

        }
    }



   let wait = SKAction.waitForDuration(3, withRange: 2)
    let spawn = SKAction.runBlock { makeBars <--- this is where it's saying the problem is()

    }

   let sequence = SKAction.sequence([wait, spawn])
    self.runAction(SKAction.repeatActionForever(sequence))
<小时/>

编辑:所以基本上我有 2 个生成位置可供选择,我用随机数在这两个位置之间随机决定,现在我想将计时器应用于函数 makeBars,但它告诉我我无法引用本地函数

<小时/>

这给了我一个错误,提示“无法引用来自另一个本地函数的捕获的本地函数”。

我该如何解决这个问题?

最佳答案

您在 didMoveToView 方法中声明了 makerbars() 方法。所以这毕竟是一个函数嵌套问题,给出完整的代码我能够看到真正的问题。 将您的代码更改为下面我修改和更正的版本:

导入SpriteKit

类游戏场景:SKScene {

var greenBall = SKSpriteNode(imageNamed: "greenball")
var redBall = SKSpriteNode(imageNamed: "redball")


override func didMoveToView(view: SKView) {

    let borderBody = SKPhysicsBody(edgeLoopFromRect: self.frame)
    borderBody.friction = 0
    self.physicsBody = borderBody

    backgroundColor = SKColor.purpleColor()




    //
    var bar0 = SKSpriteNode(imageNamed: "bar0")
    var bar1 = SKSpriteNode(imageNamed: "bar1")
    var bar2 = SKSpriteNode(imageNamed: "bar2")
    var bar3 = SKSpriteNode(imageNamed: "bar3")
    var bar4 = SKSpriteNode(imageNamed: "bar4")
    var bar5 = SKSpriteNode(imageNamed: "bar5")






    var bartest = SKSpriteNode(imageNamed: "bar0")
    bartest.position = CGPoint(x: frame.midX, y: frame.size.height * 0.633)
    addChild(bartest)







    var barra = SKShapeNode(rectOfSize: CGSize(width: frame.size.width, height: 10))
    barra.name = "bar"
    barra.fillColor = SKColor.whiteColor()
    barra.position = CGPoint(x: frame.midX, y: frame.midY)




    greenBall.position = CGPoint(x: frame.midX-100, y: frame.midY)
    greenBall.yScale = 2
    greenBall.xScale = 2

    redBall.position = CGPoint(x: frame.midX+100, y: frame.midY)
    redBall.yScale = 2
    redBall.xScale = 2


    self.addChild(redBall)
    self.addChild(greenBall)
    self.addChild(barra)



    let wait = SKAction.waitForDuration(3, withRange: 2)
    let spawn = SKAction.runBlock { self.makeBars() }
    let sequence = SKAction.sequence([wait, spawn])
    self.runAction(SKAction.repeatActionForever(sequence))
}


func makeBars() {
    var bars = SKSpriteNode(imageNamed: "bar\(arc4random_uniform(6))")
    var randomTopOrBot = arc4random_uniform(2)
    if randomTopOrBot == 0 {

        var MaxY = frame.size.height * 0.951
        var MinY = (frame.size.height * 0.633)-bars.size.height
        var Range = CGFloat(MaxY - MinY)
        var barsSpawnX = (frame.midX)
        var barSpawnY =  CGFloat(arc4random_uniform(UInt32(Range)))
        bars.position = CGPoint(x: frame.midX, y: barSpawnY)
        addChild(bars)

    } else {

        var MaxY = frame.size.height * 0.951
        var MinY = (frame.size.height * 0.633)-bars.size.height
        var Range = CGFloat(MaxY - MinY)
        var barsSpawnX = (frame.midX)
        var randomBetweenRange =  CGFloat(arc4random_uniform(UInt32((Range))))
        bars.position = CGPoint(x: frame.midX, y: (MinY+randomBetweenRange))
        println(frame.size.height * 0.633)
        addChild(bars)

    }
}


}

关于swift - 使用 waitforduration 函数时出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31082583/

相关文章:

swift - 我需要帮助将 facebook 共享添加到我的 ios 应用程序

ios - CoreData 中的异步读取 - 使用 newBackgroundContext + FetchRequest 与 newBackgroundContext + NSAsynchronousFetchRequest 的区别?

swift - 获取特定区域的节点列表?

Swift 无法构造参数类型为 Int64 的字符串

swift - UITableViewCell 中带有多行标签的 UIStackView 高度不正确

swift - 使用 NSDate 获取星期几

Swift 包含数组错误 : Missing argument label 'where:' in call

多次点击时,Swift Spritekit 会改变节点的颜色

objective-c - SKShapeNode有时会在dealloc EXC_BAD_ACCESS上产生崩溃

swift - SKPhysicsContact 主体,无法更改属性