以不同的持续时间永远重复动作
Posted
技术标签:
【中文标题】以不同的持续时间永远重复动作【英文标题】:repeat action forever with different durations 【发布时间】:2015-02-17 14:05:09 【问题描述】:我是 Sprite Kit 的新手,我正在尝试开发一款游戏,其中一些怪物会使用此代码永远四处移动。
return SKAction.sequence([
SKAction.runBlock( self.moveMonster(monster) ),
SKAction.waitForDuration(monster.movementSpeed())
])
问题是我希望使用怪物速度来改变等待时间,这是一个功能。
这段代码没有实现我想要做的,因为 movementSpeed 函数只被调用了一次。
非常感谢您的帮助!
【问题讨论】:
如果您希望等待操作对每个序列具有不同的持续时间,则必须在最后使用另一个 runBlock 创建一个新序列 【参考方案1】:您可以使用runAction
中的completionHandler
每次添加不同的SKAction sequence
来更改您的wait duration
。例如。
func addSKAction(waitDuration : NSTimeInterval)
let moveSprite = SKAction.runBlock( () -> Void in
self.moveMonster(monster)
)
let waitDuration = SKAction.waitForDuration(waitDuration)
let sequence = SKAction.sequence([moveSprite,waitDuration])
spriteNode.runAction(sequence, completion: () -> Void in
addSKAction(waitDuration) // Change wait duration each time.
)
每次更改waitDuration
变量的值。
如果你只是想随机更改waitDuration
,可以使用SKAction.waitForDuration:withRange:
let moveSprite = SKAction.runBlock( () -> Void in
self.moveMonster(monster)
)
let waitDuration = SKAction.waitForDuration(5, withRange: 4)
let sequence = SKAction.repeatActionForever(SKAction.sequence([moveSprite,waitDuration]))
这会将waitDuration
从 (5 - range/2) = 3 随机更改为 (5 + range/2) = 7。
【讨论】:
非常感谢您的回答。你认为我应该坚持这种方式还是使用更新方法。我还是新手,不确定最佳做法。 这完全取决于你的实现。实际上这两种方法都很好。 我更喜欢那个解决方案,但是我在使用新的 motionSpeeds 获得正确的 waitDuration 时遇到了一些麻烦,它总是不同步,所以我选择了另一个答案【参考方案2】:在这种情况下我不会使用动作。当计时器需要改变时,我认为使用您的更新方法更有意义。
为你的场景声明两个属性
var monsterTimer: NSTimerInterval(2)
var monsterInterval: NSTimerInterval(2)
在您的更新方法中
self.monsterTimer -= self.delta
if self.monsterTimer <= 0
self.moveMonster(monster)
// change the value of monsterInterval if you need to change the delay
self.monsterTimer = self.monsterInterval
【讨论】:
你好,我不确定增量,但我想我明白了整体的想法。我能做的是使用 update 方法的 currentTime 并做:如果(currentTime % SOMEDURATION = 0.0),你怎么看? 不是一个好主意。在此处查看我的答案以获取有关 delta 的更多信息。与上一帧时间(增量)相比,跟踪当前帧的时间很重要。它很有用,因为您可以增加时间、创建流畅的动画等。看看这个:***.com/questions/27696915/…以上是关于以不同的持续时间永远重复动作的主要内容,如果未能解决你的问题,请参考以下文章
JAVA JDK提供的一个自动生成主键 UUID.randomUUID()的方法 它永远都不会重复嘛??