Swift / SpriteKit:动画多个按钮,每个按钮之间的延迟很小

时间:2015-12-09 21:47:22

标签: swift

我有几个按钮(SKSpriteNodes),我试图循环和动画,每个按钮之间有一个小延迟。我的代码编译,但是当我运行它时 - 我只得到一个白屏和崩溃这个错误:"来自调试器的消息:由于内存问题终止"。这是我的代码:

var sequence = SKAction.sequence([animationUp, animationDown])

runAction(SKAction.repeatActionForever(SKAction.sequence([

    SKAction.runBlock({

        button1.runAction(sequence)
        SKAction.waitForDuration(0.5)

        button2.runAction(sequence)
        SKAction.waitForDuration(0.5)

        button3.runAction(sequence)
        SKAction.waitForDuration(0.5)

    }),

])))

所以我想要完成的是在每个按钮上的向上/向下动画我在屏幕上绘图,每个按钮之间有0.5秒的延迟。动画应该永远运行,直到我更改当前屏幕。我没有问题同时动画这些按钮,但我真的想添加一个统一的延迟,以便它们不会同时生成动画。有什么想法吗?

2 个答案:

答案 0 :(得分:1)

let waitAction = SKAction.waitForDuration(0.5)
let movementAction = SKAction.sequence([animateUp, animateDown])
let button1Block = SKAction.runBlock({
   button1.runAction(movementAction)
})
let button2Block = SKAction.runBlock({
   button2.runAction(movementAction)
})
let button3Block = SKAction.runBlock({
   button3.runAction(movementAction)
})
let sequence = SKAction.sequence([button1Block,waitAction,button2Block, waitAction, button3Block, waitAction])
runAction(SKAction.repeatActionForever(sequence))

答案 1 :(得分:0)

我不确定SKAction.sequence如何启动/销毁,但可能你的.repeatActionForever(..)中的循环会创建并销毁对象,而在允许循环完成之前不会释放内存。

尝试在autoreleasepool {..}块中运行内部runAction块:

autoreleasepool {
    runAction ... 
}
  

但有一种情况我们确实需要自动释放,就是我们   在方法范围中创建许多对象并希望释放它们   更早。当这些物体转向压力时非常有用   在记忆中。

http://en.swifter.tips/autoreleasepool/