我正在尝试做一个重复的任务,我可以改变它重复的延迟。这是我正在使用的当前代码:
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])))
然而,似乎因为序列已经在重复,所以改变延迟的持续时间不会产生任何影响。
答案 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