在SKSpriteNode上实现3D硬币翻转动画

4
我目前正在使用Swift 3和SpriteKit开发游戏。在游戏中有一个硬币,用户可以收集。目前,它只是下落而已,没有旋转或其他效果。我想在硬币下落时添加一个3D旋转效果,该效果应该是绕y轴旋转。我不确定如何创建这样的3D效果,或者我是否应该使用另一个程序。
我在另一个stackoverflow帖子上找到了我需要的内容,但它是用Objective-C编写的: Spinning an image like a coin 我已经找到了一种使用核心动画/核心图形来实现这一点的方法(来自链接),但我不知道如何使其在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")

这最后一行仅适用于UIView,因此在尝试在SKSpriteNode上运行它时会导致错误。
如果有人能够解释如何做到这一点,并/或者向我展示另一种为SKSpriteNode创建此动画的方法,那将不胜感激。

1
将其转换为Swift - https://objectivec2swift.com/#/home/converter/ - Pranav Wadhwa
1
UIKit和SpriteKit是两种完全不同的东西,你的代码不会起作用。Sprite Kit没有我所知道的任何可以本地实现你想要的效果的东西,你需要创建纹理以创建3D旋转效果,并以此方式进行动画处理。 - Knight0fDragon
我按下回车键以为它会换行,我更新了我的注释。 - Knight0fDragon
1
正如先前提到的,您可以创建翻页动画。如果您想要的话,另一个技巧是在一个方向上减小比例。因此,对于您发布的链接,您可以在保持Y不变的情况下减小/增加X的比例。这将无法处理颜色效果,但足以欺骗眼睛。 - Mobile Ben
你可以进行颜色混合。一次只修复一个问题。请注意,在这种情况下,您应该仅将比例限制为一个轴。否则它看起来真的不对。 - Mobile Ben
显示剩余3条评论
1个回答

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指导我正确方向!

现在这是一个很长的语句 :) 你考虑过将它分成几个独立的行吗?我的意思是,我非常熟悉SpriteKit和SKAction是我最喜欢的工具:),但即使很容易理解正在发生什么,它也不具有可读性。把它分成几个语句会让这段代码变得更好阅读。 - Whirlwind
@Whirlwind 对啊,哈哈。这么写只是因为我在我的 swift/SpriteKit "职业生涯" 早期就写了那行代码。现在我会把它修复好。 - Nik

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接