2017-06-23 7 views
0

私はSpriteKitプロジェクトで多くのSKActionを持っています。 SKActionsのデフォルトのtimingModeは "linear"です。拡張子を使用して、このtimingModeをデフォルトにオーバーライドすることは可能ですか? "easeInEaseOut"ので、すべてのSKActionsはtimingMode = easeInEaseOutですか?SKActionを継承してtimingModeをオーバーライドする

私はさまざまな "拡張"スタイルを試しましたが、コンパイルすることはありません。通常、Objective-Cセレクタの 'init'が暗黙の初期化子と衝突して "timingMode ' init()」は同じObjective-Cのセレクタと」

ドキュメントはこののいずれかの例を与えるようには見えませんが、確かにこれを行うことができるようにするために有用なものでしょうか?特にあなたのゲームに何百というSKActionsがあるとしたら?

答えて

2

は、他のは、あなたが特定のタイミング・モードを使用して実行できるようにSKNodeを拡張し、1がすばやく.easeInEaseOutタイミングモードを呼び出すことができるように、アクションを拡張し、あなたの毒を選択します。デフォルトの動作を変更する方法はありません

、唯一の他の方法は面倒になることができ、存在するすべてのアクションのための独自の静的メソッドを作成することです。

extension SKAction 
{ 
    //e.g. SKAction.move(to: CGPoint.zero, duration: 10).easeInEaseOut() 
    func easeInEaseOut() -> SKAction 
    { 

     self.timingMode = .easeInEaseOut 
     return self 
    } 


} 
extension SKNode 
{ 
    func runWithEaseInEaseOut(action:SKAction,withKey key: String = "") 
    { 
     action.timingMode = .easeInEaseOut 
     if key != "" 
     { 
      self.run(action,withKey:key) 
     } 
     else 
     { 
      self.run(action) 
     } 
    } 

} 
+0

本当にありがとうございます。はい、これは助けになります。私はあなたが単純に拡張および/またはスウィフトの非常に助けにならないで、グローバルに上書きすることができないなどのアクションシーケンスで作成したアクションに追加しやすい最初のものを、好きです。 –

+1

それは理由のために静的です、それは効率を助けます – Knight0fDragon

関連する問題