2017-07-30 20 views
1

1つの入力パラメータを取るSKActionによって関数を呼び出そうとしています。私はSpriteKitベースを使用していない - 『>ボイド()』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

なぜあなたも使用する必要がないタイプ() ->()() -> Void

の場合タイプ()しかし{ decreasHealth }であるためでありますあなたの機能を実行するSKAction? –

+0

私は一連のアクションで複数回繰り返して使用するため、アクションを実行する必要があります。私は単に関数を呼び出すことはできません。 –

+0

あなたの状況を完全には説明していません。アクションのシーケンスは何ですか?シーケンスを何回繰り返しますか? –

答えて

3

あなたがそのエラーを取得する場合、通常、それはちょうどあなたが中括弧の中に機能を囲む必要があることを意味しそう:。。。

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

これを複数の行に分割していた場合は、見やすくなりました。

decreaseHealthは(クロージャは、スウィフトに機能タイプですので、パラメータ/引数と戻りを持っている)

+0

完璧に動作します! –

+0

@ DanO'Leary私は嬉しいです:)私はXcodeを開くことさえしなかった:P – Fluidity

2

予想引数の型を「型の値を変換できません 『()』:

私はSKActionを宣言すると、私はエラーを取得します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私はそれを上のように書いていますが、あなたが問題をはるかに早く見つけるのを助けてくれました。私は1ライナーがあなたが何をしているのかについて確かに分かっていると思っています。それ以外の場合は、保守性と可読性の面で冗長性があります。 – Fluidity

+1

@ Fluidええ、エルトマートはこれをもっとうまく書いていることに同意します。私はただの怠惰が私の最高を得たと思う。 –

関連する問題