2017-07-30 30 views
1

我想通過帶有1個輸入參數的SKAction來調用函數。使用SKAction調用帶參數的函數

當我宣佈SKAction,我得到一個錯誤:「無法將類型的價值‘()’到期望的參數類型‘() - >虛空’

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])) 

} 
+0

爲什麼你甚至需要使用SKAction來運行你的功能? –

+0

我需要使用一個動作來運行該功能,因爲我將在一系列動作中使用它,重複多次。我不能簡單地調用這個函數。 –

+0

你沒有完全解釋你的情況。什麼是一系列的行動?你打算重複這個序列多少次? –

回答

3

通常,當你得到這個錯誤,它只是意味着你需要用花括號內的功能,所以:。

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

如果您已將其分成多行,則可能更容易發現。

這是因爲decreaseHealth()類型,但{ decreasHealth }如果() ->()類型或() -> Void

(閉包是在斯威夫特函數類型,從而有參數/參數和返回)

+0

完美的作品! –

+0

@ DanO'Leary我很高興:)我甚至沒有打開Xcode:P – Fluidity

2

我沒有用SpriteKit的3個月,但像下面應該工作

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) 
} 
+0

謝謝!我只是從功能的括號切換到大括號。 –

+1

@ DanO'Leary雖然我會像上面這樣寫它:它會幫助你更快地發現問題。我認爲,當你確信自己在做什麼,以及什麼時候做什麼只是樣板材料時,最好選擇一條襯裏。否則,有點冗長可以很好的維護性和可讀性 – Fluidity

+1

@流利性是我同意ElTomato在這裏寫得更好。我想只是懶惰得到了我最好的。 –