2017-08-02 16 views
1

スプライトが画面を横切って移動していて、クリックされると消えます(つまり削除されます)。子ノードがタッチされたかどうかをチェックする方法Swift 3

次のように私はtouchesBegan funcをオーバーライドしています

override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) { 
    print("touch") 
    let touch = touches.first! 
    let location = touch.location(in: self) 
    for child in self.children { 

     if child.position == location { 
      child.removeFromParent() 
     } 
    } 
} 

これは、誰かが私が間違っているつもりですどこ私に言うことができる、任意の効果を持っていないようですか?

+0

私は新しいタイトルを提案してもいいですか? – Shades

+1

今すぐ変更する。 –

+0

ビューでタッチ操作を有効にするように設定しましたか、それらのスプライトにタッチジェスチャーを追加しましたか? – Lunarchaos42

答えて

2

どのクラスでこのメソッドを実装しましたか?

それはSKNode自身にあった場合は、単にん:このメソッドはSKSceneである場合

override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) { 

    self.removeFromParent() 

} 

しかし、実施されたこの方法はおそらく動作しないでしょう。 child.positionは、タッチが行われた点(x、y)を返します。そして、あなたはSKNode(中心点)のタッチポイントと位置を比較しようとしていますが、それはうまくいかないでしょう。

この方法を使用する代わりに、SKSceneの方法.nodeAtPointを試してみてください。このため

あなたはSKNodeの「名前」プロパティに値を配置する必要があります:

override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) { 
    print("touch") 
    let touch = touches.first! 
    let positionInScene = touch.locationInNode(self) 
    let touchedNode = self.nodeAtPoint(positionInScene) 

    if let name = touchedNode.name 
    { 
     if name == "your-node-name" 
     { 
      touchedNode.removeFromParent() 
     } 
    } 

} 

フォント:How do I detect if an SKSpriteNode has been touched

+0

最初の例をSpriteクラスに追加しました。完全に動作します。ありがとうございました! –

関連する問題