2017-01-24 4 views
2

タッチが有効なLocationNodeというサブクラス化されたノードがあります。それはこのように見えます。サブクラス化されたノードですが、シーンのタッチを検出したい

override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) { 
    let touchLocation = touches.first!.location(in: self) 
    let touchedNode = self.atPoint(touchLocation) 

    //if touchedNode.name != nil { 
     print("touched") 
    //} 
} 

私はこれを行うしようとすると、しかし、それを私は、実際のシーンファイルでは、このようなすべてのタッチイベントを制御したいので、私は、このサブクラスのファイルにtouchesBeganをオーバーライドしていない

class LocationNode: SKSpriteNode, CustomNodeEvents { 
func didMoveToScene() { 
    self.isUserInteractionEnabled = true 
} 
} 

動作しません。シーンファイル内のサブクラス化されたノードのタッチイベントを制御するにはどうすればよいですか?

編集:

ここで、私のオーバーライド機能は、シーン内でどのように見えるのですか。

override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) { 
    let touchLocation = touches.first!.location(in: self) 
    let touchedNode = self.atPoint(touchLocation) 
    print("TOUCHED") 
} 
あなたは、あなたがメインにも(両方の場所にタッチを扱うことができる親クラスへの「タッチの復帰」を持つように、この場合 LocationNodeには、カスタムクラスに以下のコードを実装することができ
+0

あなたはこれで何を意味するか説明することができます:「私はこのシーンでtouchesBeganをオーバーライドしていない、私は実際のシーンファイルでは、このようなすべてのタッチイベントを制御したいので:」 – Confused

+1

申し訳ありませんが、私は今これを編集しました。 – illuminatedtype

+0

サブクラス化されたノードでのユーザーのやり取りを無効にする必要があります – Whirlwind

答えて

3

シーン):

override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) { 
     for touch in touches { 
      print("touched!") 
     } 
     guard let parent = self.parent else { return } 
     parent.touchesBegan(touches, with: event) 
} 
+0

私はガードが親クラス(この場合はSKSpriteNodeとシーン)にタッチを返すと仮定していますが、動作していないようです。しかし、2番目の部分は機能します(つまり、サブクラス内の独自のタッチイベントを処理していることを意味します)。 – illuminatedtype

+0

ガード部分には親クラスがあることを確認してください。2番目の部分が機能する場合は、親があることを意味します –

+0

OK、ありがとうございます。オーバーライド機能がシーン内でどのように見えるかを追加しました。 locationNodeをタッチすると、「TOUCHED!」が発生します。親関数からは削除されません。 – illuminatedtype

関連する問題