我想知道是否可以使用变量增加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
}
答案 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