增加/减少waitForDuration()?

时间:2015-03-30 04:39:52

标签: swift sprite-kit

我想知道是否可以使用变量增加withDuration()。以下是我试图做的事情。这也是SpriteKit,这是我第一次使用它,所以我仍然有点不确定。虽然这段代码可以改变浮动,但实际上并没有改变waitForDuration(难度)

var timer: NSTimer!
var difficulty = 1.0


override func didMoveToView(view: SKView) {
    backgroundColor = SKColor.whiteColor()

    player.position = CGPoint(x: size.width * 0.5, y: size.height * 0.25)
    player.physicsBody = SKPhysicsBody(circleOfRadius: player.size.width/2)
    player.physicsBody?.dynamic = true

    addChild(player)

    physicsWorld.gravity = CGVectorMake(0, 0)
    physicsWorld.contactDelegate = self

    var timer = NSTimer.scheduledTimerWithTimeInterval(1.0, target: self, selector: "increaseDifficulty", userInfo: nil, repeats: true)

    runAction(SKAction.repeatActionForever(
        SKAction.sequence([
            SKAction.runBlock(addEnemy),
            SKAction.waitForDuration(difficulty)
            ])
        ))
}

func increaseDifficulty() {
  difficulty -= 0.1
}

2 个答案:

答案 0 :(得分:1)

你没有达到预期的效果,因为'难度'在SKAction的第一个声明中捕获,它再也没有引用外部声明。

解决这个问题的两种方法:

而不是SKAction.repeatActionForever(),而是将SKAction.sequence()转储为increaseDifficulty。您必须稍微调整一下数字以使其正常工作,但NSTimer已经在重复运行,您可以使用它。

第二种方式(不是100%肯定这个)就是把'&'困难面前的象征。这通过引用而不是值来传递难度,这应该给你预期的效果。我不确定Swift是否允许这样做,但在C ++中我们可以做什么。

答案 1 :(得分:1)

执行此操作的一种方法是使用completionHandler的{​​{1}}。例如。

runAction function

另一种方法是使用func addEnemyWithChangingDifficulty() { let waitAction = SKAction.waitForDuration(difficulty) let addEnemyAction = SKAction.runBlock { () -> Void in self.addEnemy() } runAction(SKAction.sequence([addEnemyAction,waitAction]), completion: { () -> Void in self.addEnemyWithChangingDifficulty() }) } 跟踪update function

waitDuration