web-dev-qa-db-ja.com

SpriteKitでオブジェクトの子ノードへのタッチを検出します

SKNodeであるカスタムクラスがあり、その中にいくつかのSKSpriteNodeがあります。ゲームシーンからこれらの子SKSpriteNodesへのタッチを検出する方法はありますか?

私はSwiftで働いています

11
Kyle Goslan
override func touchesEnded(touches: NSSet, withEvent event: UIEvent) {

   let touch = touches.anyObject() as UITouch

   let touchLocation = touch.locationInNode(self)

    if([yourSprite containsPoint: touchLocation])
    {
         //Sprite contains touch
    }
}

出典: http://www.raywenderlich.com/84434/Sprite-kit-Swift-tutorial-beginners

10
meisenman

Appleの SceneKitVehicle デモを調べてください。誰か親切に Swiftに移植

必要なコードはGameView.Swiftファイルにあります。 GameViewで、touchesBeganオーバーライドが表示されます。これが私のバージョンのSwift 2.1:

override func touchesBegan(touches: Set<UITouch>, withEvent event: UIEvent?) {
    guard let scene = self.overlaySKScene else {
        return
    }

    let touch = touches.first!
    let viewTouchLocation = touch.locationInView(self)
    let sceneTouchPoint = scene .convertPointFromView(viewTouchLocation)
    let touchedNode = scene.nodeAtPoint(sceneTouchPoint)

    if (touchedNode.name == "Play") {
        print("play")
    }
}

明確でない場合; GameViewは、ストーリーボードを介してアプリのビュークラスとして設定されます。

2
Graham Perks

Touchの場所をSKNodeの場所と比較する必要があります

LocationInNode()を使用して、次のいずれかのメソッドでタッチの場所を取得できます。

  • touchesBegan()
  • touchesMoved()
  • touchesEnded()
0
CorPruijs