ios - 如何创建到 SKAction 的过渡?

标签 ios sprite-kit swift2

我创建了每 10 秒更改一次背景颜色的函数
我想在改变背景颜色时添加过渡。

游戏场景:

let wait = SKAction.waitForDuration(10)

        let block = SKAction.runBlock({
            [unowned self] in
            self.backgroundColor = UIColor.randomColor()
            })


        let sequence = SKAction.sequence([wait,block])

        runAction(SKAction.repeatActionForever(sequence), withKey: "colorizing")

感谢帮助!

最佳答案

你可以这样做:

override func didMoveToView(view: SKView) {

   colorize()
}


func colorize(){

     let colorize = SKAction.sequence([

          SKAction.colorizeWithColor(UIColor.randomColor(), colorBlendFactor: 1, duration: 3),

          SKAction.runBlock({[unowned self] in self.colorize()})
      ])

     runAction(colorize, withKey: "colorizing")
}

这是一个递归函数,每次 colorizeWithColor 操作完成时都会调用它自己。这是必需的,因为只需重复此操作:
 SKAction.colorizeWithColor(UIColor.randomColor(), colorBlendFactor: 1, duration: 3)

在 Action 序列中将始终将背景着色为相同的颜色。这会发生,因为当您创建一次 Action 时,您无法随时间更改它(例如,您可以更改其速度或暂停它,但您无法更改 duration 或任何其他传递的参数)。相反,我们 重新创建 与某个键相关的操作每次 .这是来自有关与键关联的操作的文档:

If an action using the same key is already running, it is removed before the new action is added.



因此,每次我们运行与“着色”键相关联的新 Action 时,前一个 Action 都会被删除,并且始终只有一个带有该键的 Action 。

关于ios - 如何创建到 SKAction 的过渡?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35815403/

相关文章:

ios app-on-device 调试事件

iphone - 每次点击 4 个按钮标题更改

ios - SpriteKit项目中如何检测当前场景

swift - SpriteKit - didBegin contact 被调用 30 次而不是 1 次

swift 2.0 : 'enumerate' is unavailable: call the 'enumerate()' method on the sequence

ios - 在 Swift 2 中使用 Alamofire 进行错误处理

ios - UIScrollView - 检测布局 subview 中的滚动与方向变化?

ios - 为什么 UIGraphicsGetCurrentContext() 在全局可用?

ios - SpriteKit 为一个节点改变 SKAction

swift - Swift 中的对象 : Value of 'Object' has no member