运行时修改重复的任务序列

时间:2014-12-29 22:23:51

标签: ios swift sprite-kit skaction

我正在尝试做一个重复的任务,我可以改变它重复的延迟。这是我正在使用的当前代码:

 var actionwait = SKAction.waitForDuration(self.wait)
        var actionrun = SKAction.runBlock({
            self.count+=1
            if (self.count % 2 == 0 && self.wait > 0.2){

                self.wait -= 0.1
                 actionwait.duration = self.wait
            }
            for node in self.children{
                if (node.isMemberOfClass(Dot)){
                    node.removeFromParent()
                }
            }
            var radius = CGFloat(arc4random_uniform(100) + 30)
            var newNode = Dot(circleOfRadius: radius)
            var color = self.getRandomColor()
            newNode.fillColor = color
            newNode.strokeColor = color
            newNode.yScale = 1.0
            newNode.xScale = 2.0
            newNode.userInteractionEnabled = true
            newNode.setScene(self)
            newNode.position = newNode.randomPos(self.view!)
            self.addChild(newNode)

            })

        self.runAction(SKAction.repeatActionForever(SKAction.sequence([actionwait,actionrun])))

然而,似乎因为序列已经在重复,所以改变延迟的持续时间不会产生任何影响。

1 个答案:

答案 0 :(得分:2)

当您创建actionwait时,它会将值保存在该关闭内并继续在repeatActionForever

中使用它们

当您跟踪更改时,最好在update方法中执行此类操作。在这种情况下使用操作可能不是最好的方法。

我不确定你(对于你的游戏)何时需要检查更改。对于大多数使用update方法的事情来说已经足够了

这是我在更新中实现计时器的一种方式

// MY TIMER PROPERTIES IN MY CLASS
var missleTimer:NSTimeInterval = NSTimeInterval(2)
var missleInterval:NSTimeInterval = NSTimeInterval(2)


// IN MY UPDATE METHOD
self.missleTimer -= self.delta

if self.missleTimer <= 0 {  // TIMER HIT ZERO, DO SOMETHING!
    self.launchMissle()  // LAUNCH MY MISSLE
    self.missleTimer = self.missleInterval  // OKAY LETS RESET THE TIMER
}

delta是此帧与最后一帧之间的时间差。它用于创建流体运动和跟踪时间。像这样的东西。这是spritekit项目中非常标准的。你通常需要使用delta projectwide

声明这两个属性:

// time values
var delta:NSTimeInterval = NSTimeInterval(0)
var last_update_time:NSTimeInterval = NSTimeInterval(0)

这应该是更新方法的顶部外观

func update(currentTime: NSTimeInterval) {
    if self.last_update_time == 0.0 
        self.delta = 0
    } else {
        self.delta = currentTime - self.last_update_time
    }

    self.last_update_time = currentTime