2016-11-28 5 views
1

私は、カスタムSKActionを作成することができますはSKActionスウィフト

//Setup 
let node = SKNode() 
node.position = CGPoint(x: 50, y: 50) 
let destination = CGPoint(x: 100, y: 100) 

//Move from node's current position half way towards the destination 
let action = SKAction.move(from: node.position, halfWayTo: destination, duration: 1) 
node.run(action) 

が、標準に合わせて:私は、このように使用

extension SKAction { 
    class func move(from: CGPoint, halfWayTo: CGPoint, duration: TimeInterval) -> SKAction { 
    let midPoint = CGPoint(x: (from.x + halfWayTo.x)/2, y: (from.y + halfWayTo.y)/2) 
    return SKAction.move(to: midPoint, duration: duration) 
    } 
} 

SKAction.move(to: destination, duration: 1) 

私はむしろ言うことができるでしょう:

let action = SKAction.move(halfWayTo: destination, duration: 1) 
node.run(action) 

しかし、カスタムSKActionの内部から 'ノード'を参照する方法がわからないので、その位置を取得して中間点を計算できますか?

+0

私はしました似たようなことをしようとしていましたが、私はそれをする方法を考えることができません。あなたが気づいたように、 'SKAction.move(halfwayTo:)'を呼び出すとき、 'SKAction'は問題の' SKNode'へのアクセス権を持ちません。 'SKNode'へのあなたの拡張は興味深い考えですが、元の例のように' SKAction'を拡張して出発点を渡すと思います。私たちが 'SKAction'を作成していることをコードで明確にするのが良いでしょう。 – GreatBigBore

+0

私はそれがSKActionの拡張版として優れていることに同意します。 – Adahus

答えて

0

selfを使用してください。

extension SKAction { 
    class func move(halfWayTo: CGPoint, duration: TimeInterval) -> SKAction { 
    let from = self.position 
    let midPoint = CGPoint(x: (from.x + halfWayTo.x)/2, y: (from.y + halfWayTo.y)/2) 
    return SKAction.move(to: midPoint, duration: duration) 
    } 
} 

その後、私はまだSKActionは、それが適用されたノードへの参照を持っているかどうかわからないんだけど

node.move(halfWayTo: B, duration: 1) 
+0

TheValyreanGroupに感謝します。 – Adahus

+1

私はあなたの提案を試しました。 "let '= self.position"という行にコンパイルエラーが表示される: "Type' SKAction 'にメンバの位置がない' – Adahus

+0

元の質問に構文エラーがあり、私が元の質問を編集したので、これは間違っていました。 – Adahus

0

(あなたが言ったように)を呼び出す - それは実行している場合でも - あるいは場合でも、それにアクセスする方法があるかどうかはわかりません。もし誰かがそれが私に知らせてください知っている。

次のように私は1つのアプローチを考えてきました

代わりSKActionを拡張する、次のようにSKNodeを拡張します。その後、

extension SKNode { 
    func move(halfWayTo: CGPoint, duration: TimeInterval) -> SKAction { 
    let from = self.position 
    let midPoint = CGPoint(x: (from.x + halfWayTo.x)/2, y: (from.y + halfWayTo.y)/2) 
    return SKAction.move(to: midPoint, duration: duration) 
    } 
} 

と、次のように使用します。

//Setup 
let node = SKNode() 
node.position = CGPoint(x: 50, y: 50) 
let destination = CGPoint(x: 100, y: 100) 

//Move from node's current position half way towards the destination 
let action2 = node.move(halfWayTo: destination, duration: 1) 
node.run(action2)