如何更新waitForDuration常量?

时间:2015-06-08 20:15:35

标签: ios sprite-kit skaction

我有一个闪光灯,它使用隐藏和取消隐藏圆形节点的SKAction序列。我希望能够根据两个按钮更改闪烁的间隔。我声明了一个变量stdTime,我在touchesBegan方法中更改它,但它不起作用。我错过了什么?

我的didMoveToView:

let blink = SKAction.sequence([
        SKAction.waitForDuration(stdTime),
        SKAction.hide(),
        SKAction.waitForDuration(stdTime),
        SKAction.unhide()])

    let blinkForever = SKAction.repeatActionForever(blink)

    metronome!.runAction(blinkForever)

和我的接触开始:

if upArrow!.containsPoint(location) {
            stdTime = stdTime + 0.1
            println("here: \(stdTime)")
        }

1 个答案:

答案 0 :(得分:2)

waitForDuration接受NSTimeInterval而不是变量。因此,它需要在创建时设置变量的任何时间,并且不会返回您使用的变量。

根据您所寻找的结果,这可能会有所帮助。

func startBlink(){
    let blink = SKAction.sequence([
        SKAction.waitForDuration(stdTime),
        SKAction.hide(),
        SKAction.waitForDuration(stdTime),
        SKAction.unhide()])

    let blinkForever = SKAction.repeatActionForever(blink)

    metronome!.removeActionForKey("blink")

    metronome!.runAction(blinkForever, withKey: "blink")
}


if upArrow!.containsPoint(location) {
    stdTime = stdTime + 0.1
    startBlink()
    println("here: \(stdTime)")
}

不中断序列的另一个选择是做这样的事情

func startBlink(){

    let blink = SKAction.sequence([
        SKAction.waitForDuration(stdTime),
        SKAction.hide(),
        SKAction.waitForDuration(stdTime),
        SKAction.unhide(),
        SKAction.runBlock( {
            self.startBlink()
        })])

    metronome?.runAction(blink, withKey: "blink")
}


if upArrow!.containsPoint(location) {
        stdTime = stdTime + 0.1
        println("here: \(stdTime)")
}

并以自己的方式递归调用该方法。这样每次它都会到达结束时,它将采用更新的stdTime。