我有一个运行动作循环,它会产生一个敌人然后等待并产生另一个敌人。目的是得分越高,敌人产生的速度就越快。
但是现在的代码无论如何都会以相同的速度产生敌人。我一直在覆盖func update(currentTime:NSTimeInterval)方法中更新速率,所以我不知道出了什么问题。
override func update(currentTime: NSTimeInterval){
spawnRate = 2.0-(0.1*(Double)(((Double)(Score))/(10.0)))
if(spawnRate < 0.5){
spawnRate = 0.5
}
}
override func didMoveToView(view: SKView) {
runAction(SKAction.repeatActionForever(
SKAction.sequence([
SKAction.runBlock(addEnemy),
SKAction.waitForDuration(spawnRate)
])
))
}
答案 0 :(得分:1)
问题在于:
SKAction.sequence([
SKAction.runBlock(addEnemy),
SKAction.waitForDuration(spawnRate)
])
成为一个人,然后永远重复。
尝试将代码放在
中runAction(SKAction.repeatActionForever(runblock(spawnAndWait()))
然后制作一个单独的函数。
spawnAndWait() { // put here the code for spawning the enemy and waiting spawnrate duration.
b.t.w
将更新spawnRate的代码放在分数增加的位置。因为那样更有效率。然后在更新方法中因为不断调用。
答案 1 :(得分:1)
目前正在发生的事情是你:
所以没有任何改变。要解决这个问题,一种方法是每次使用递归调用和更改持续时间参数:
import SpriteKit
class GameScene: SKScene {
let shape = SKSpriteNode(color: UIColor.redColor(), size: CGSize(width: 20, height: 20))
var delay:NSTimeInterval = 1.0
override func didMoveToView(view: SKView) {
recursiveMethod()
}
func recursiveMethod(){
let recursive = SKAction.sequence([
SKAction.waitForDuration(delay),
SKAction.runBlock({self.recursiveMethod();println("delay \(self.delay)")})
])
runAction(recursive)
}
override func update(currentTime: NSTimeInterval) {
if(delay > 0.2){delay = delay - 0.001}
}
}