【问题标题】:Using an SKAction to call a function with parameters使用 SKAction 调用带参数的函数
【发布时间】:2017-07-30 20:49:20
【问题描述】:

我正在尝试通过采用 1 个输入参数的 SKAction 调用函数。

当我声明 SKAction 时,我收到一个错误:“无法将类型 '()' 的值转换为预期的参数类型 '() -> Void'

self.run(SKAction.repeat(SKAction.sequence([SKAction.wait(forDuration: 1), SKAction.run(self.decreaseHealth(by: 5.0))]), count: 10))

func decreaseHealth(by amount: Double){
    print(health)
    health -= amount
    print(health)
    let percentageToDecrease = amount / totalHealth
    let resizeAction = SKAction.resize(toHeight: CGFloat(600*(1-percentageToDecrease)), duration: 1)
    let redAmount: CGFloat = CGFloat(1.0 - health / totalHealth)
    let greenAmount: CGFloat = CGFloat(health / totalHealth)
    let recolorAction = SKAction.colorize(with: UIColor(red: redAmount, green: greenAmount, blue: CGFloat(0.0), alpha: CGFloat(1.0)), colorBlendFactor: 0, duration: 1)

    healthBar.run(SKAction.group([resizeAction, recolorAction]))

}

【问题讨论】:

  • 为什么你甚至需要使用 SKAction 来运行你的函数?
  • 我需要使用一个动作来运行该函数,因为我将在一系列动作中使用它,重复多次。我不能简单地调用函数。
  • 你没有完全解释你的情况。动作顺序是怎样的?你打算重复这个序列多少次?
  • @ElTomato 我已经编辑了包含的代码,以更好地说明为什么我想用 SKAction 调用这个函数。

标签: swift sprite-kit skaction


【解决方案1】:

通常当您遇到该错误时,这仅意味着您需要将函数括在大括号内。所以:

self.run(SKAction.repeat(SKAction.sequence([SKAction.wait(forDuration: 1), SKAction.run( { self.decreaseHealth(by: 5.0) } )]), count: 10))

如果你把它分成多行,它会更容易发现。

这是因为decreaseHealth() 类型,但{ decreasHealth }() -> ()() -> Void 类型

(闭包是Swift中的函数类型,因此有参数/参数和返回)

【讨论】:

  • 完美运行!
  • @DanO'Leary 我很高兴 :) 我什至没有打开 Xcode :P
【解决方案2】:

我已经 3 个月没有使用 SpriteKit 了。但是类似下面的东西应该可以工作。

func repeatMe() {
    let waitAction = SKAction.wait(forDuration: 1.0)
    let completionAction = SKAction.run {
        self.decreaseHealth(by: 5.0)
    }
    let seqAction = SKAction.sequence([waitAction, completionAction])
    let repeatAction = SKAction.repeat(seqAction, count: 10)
}

【讨论】:

  • 谢谢!我只是从函数周围的括号切换到大括号。
  • @DanO'Leary 我会像上面那样写它:它会帮助您更快地找到问题。我认为 1 班轮最适合您非常确定自己在做什么,而当您所做的只是样板文件时。否则,有点冗长可能有利于可维护性和可读性
  • @Fluidity 是的,我同意 ElTomato 在这里写得更好。我想只是懒惰占了我的上风。
猜你喜欢
  • 1970-01-01
  • 2018-06-11
  • 2014-04-02
  • 1970-01-01
  • 1970-01-01
  • 2017-06-03
  • 2011-10-11
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多