SKNodeであるカスタムクラスがあり、その中にいくつかのSKSpriteNodeがあります。ゲームシーンからこれらの子SKSpriteNodesへのタッチを検出する方法はありますか?
私はSwiftで働いています
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
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は、ストーリーボードを介してアプリのビュークラスとして設定されます。
Touchの場所をSKNodeの場所と比較する必要があります
LocationInNode()を使用して、次のいずれかのメソッドでタッチの場所を取得できます。