【问题标题】:3D Coin Flipping Animation on SKSpriteNodeSKSpriteNode 上的 3D 硬币翻转动画
【发布时间】:2016-12-27 18:03:45
【问题描述】:

我目前正在使用 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 创建此动画的方法,我们将不胜感激。

【问题讨论】:

  • 将其转换为 swift - objectivec2swift.com/#/home/converter
  • ...嗯 UIKit 和 SpriteKit 是太不同的动物,您的代码将无法工作,Sprite Kit 没有任何我知道的可以实现您在本地寻找的东西,您将必须制作能够产生 3D 旋转效果的纹理并以这种方式对其进行动画处理。
  • 我想...是否还有其他类似的方法可以在 sprite kit 中创建这种类型的动画?
  • 我按回车键认为它会换行,我更新了我的评论
  • 如前所述,您可以创建翻书动画。如果您愿意,另一个技巧是在一个方向上缩小比例。因此,对于您发布的链接,您可以减少/增加 X 的比例,同时保持 Y 不变。这不会处理颜色效果,但足以欺骗眼睛。

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


【解决方案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.sequences 放入组中,以便每个序列同时运行。另请注意,所有持续时间均为 0.75。如果您使用此代码,请确保所有持续时间都相同,以免破坏效果。

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

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

【讨论】:

  • 现在这是一个很长的声明:) 您是否考虑过将其放在几行单独的行中?我的意思是,我对 SpriteKit 非常熟悉,而 SKAction 是我的最爱 :),但即使很容易理解发生了什么,它也不可读。将其分解为几条语句会使这段代码变得更好。
  • @Whirlwind 是的,哈哈。之所以这样写,是因为我在 swift/SpriteKit “职业生涯”的早期就写了那行。我现在就解决这个问题
猜你喜欢
  • 1970-01-01
  • 2018-12-06
  • 1970-01-01
  • 2018-12-30
  • 2018-07-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-09-02
相关资源
最近更新 更多