繁体   English   中英

增加/减少waitForDuration()?

[英]Increasing/Decreasing waitForDuration( )?

我想知道是否可以通过变量withForDuration()增加它。 简而言之,这就是我试图做到的。 这也是SpriteKit,这是我第一次使用它,因此我仍然不确定。 尽管此代码段可以更改浮点数,但实际上并不会更改waitForDuration(difficulty)

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
}

您没有达到预期的效果,因为'difficulty'的值被捕获在SKAction的第一个声明中,并且再也不会引用外部声明。

解决此问题的两种方法:

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

第二种方法(对此不是100%肯定)是将'&'符号放在难度前面。 这通过引用而不是通过值传递了难度,这应该给您预期的效果。 我只是不确定Swift是否允许这样做,但是在C ++中我们可以做到这一点。

一种实现方法是使用runAction functioncompletionHandler 例如。

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

var lastAddedTime : CFTimeInterval = 0

override func update(currentTime: CFTimeInterval) {

    if currentTime - lastAddedTime > CFTimeInterval(difficulty) {
        addEnemy()
        lastAddedTime = currentTime
    }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM