【问题标题】:Swift, How to call a function that's in an extension in my GameScene?Swift,如何调用我的 GameScene 扩展中的函数?
【发布时间】:2019-10-23 17:34:26
【问题描述】:

我正在 Swift 上制作 2D 平台游戏,我希望当玩家被武器击中时屏幕会抖动。我尝试了几种不同的解决方案,比如只让背景精灵摇晃,但效果并不相同。我在网上找到了创建一个抖动函数的代码,我相信它会抖动屏幕,但唯一的问题是我不知道如何在我的 GameScene 中调用它,因为它是在我的类之外定义的。例如,我的代码如下所示:

class GameScene: SKScene, SKPhysicsContactDelegate {
   // code

func didBegin(_ contact: SKPhysicsContact) {
   // call shake function
}
}

extension UIView {
func shake() {
    let animation = CAKeyframeAnimation(keyPath: "transform.translation.x")
    animation.timingFunction = CAMediaTimingFunction(name: CAMediaTimingFunctionName.linear)
    animation.duration = 0.6
    animation.values = [-20, 20, -20, 20, -10, 10, -5, 5, 0]
    self.layer.add(animation, forKey: "shake")
  }
}

我想在我的代码中显示“调用摇动功能”的地方调用摇动功能。我该怎么称呼它?

【问题讨论】:

  • 我对 SpriteKit 了解不多,但所有 UIView 实例现在都应该有一个名为“shake()”的新函数。但我不认为 SKScene 是 UIView 的子类,所以这行不通。

标签: swift xcode sprite-kit


【解决方案1】:

shake 方法在UIView 的扩展中声明,这意味着它可以在任何UIView 实例上调用。

SKView 是一种UIView,它拥有一个SKSceneSKScenes 有一个view 属性,可用于访问SKView。因此,您可以像这样在场景中调用shake

self.view?.shake()

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-03-24
    • 2022-06-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多