3D硬币在SKSpriteNode上翻转动画

时间:2016-08-20 20:13:47

标签: swift sprite-kit core-graphics core-animation coin-flipping

我目前正在使用Swift 3和SpriteKit开发游戏。我有一个硬币在用户可以收集的游戏中掉落。现在,它下降,没有任何轮换或任何东西。我想在它落下时添加3D旋转效果。此效果应该是围绕y轴的旋转。我不确定如何创建这样的3D效果,或者我是否应该使用其他程序。

我已经在另一个堆栈溢出帖子上找到了我正在寻找的东西,但它在objective-c中:

Spinning an image like a coin

我已经找到了一种方法(通过链接)与Core Animations / Core Graphics,但我不知道如何使它在SKSpriteNode上工作。

    var coinFlip = CATransition()
    coinFlip.startProgress = 0
    coinFlip.endProgress = 1.0
    coinFlip.type = "flip"
    coinFlip.subtype = "fromRight"
    coinFlip.duration = 0.5
    coinFlip.repeatCount = 2

    yourView.layer.addAnimation(coinFlip, forKey: "transition")

这最后一行仅适用于UIViews,因此当我尝试在SKSpriteNode上运行它时会导致错误。

如果有人可以向我解释如何执行此操作和/或向我展示为SKSpriteNode创建此动画的另一种方式,我们将不胜感激。

1 个答案:

答案 0 :(得分:1)

我最后通过减少和增加硬币的xScale来创建旋转效果,同时还更改colorBlendFactor以使硬币在光线不应该击中时变暗它

这是我的代码:

let scaleSequence = SKAction.sequence([SKAction.scaleX(to: 0.1, duration: 0.75), SKAction.scaleX(to: 1, duration: 0.75)])
let darkenSequence = SKAction.sequence([SKAction.colorize(with: SKColor.black, colorBlendFactor: 0.25, duration: 0.75, SKAction.colorize(withColorBlendFactor: 0, duration: 0.75)])
let group = SKAction.group([scaleSequence, darkenSequence])
fallingCoin.run(SKAction.repeatForever(group))

它有点乱,但它有效。简单地说,它使用SKAction.group,因此操作同时进行,我将SKAction.sequence的颜色变暗,然后转动"组中的硬币,因此每个序列同时运行。另请注意,所有持续时间均为0.75。如果您使用此代码,请确保所有持续时间都相同,因此效果不会被破坏。

要使硬币看起来像翻转而不是转动,而不是修改xScale,而是改为yScale

感谢@Mobile Ben让我指向了正确的方向!