[英]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 function
的completionHandler
。 例如。
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.