私はSwiftとSpriteKitを使っています。SKShapeNodeがタッチされたときの正確な検出方法は?
私は次のような状況があります。ここでは
を、 "三角形" のそれぞれがSKShapenodeです。 私の問題は、誰かが触れている三角形の画面に触れたときを検出したいということです。 私は私の機能は、私が唯一実際に触れられた1知りたいしながら、すべてのhitboxesに触れ、私を返すように、すべてのこれらの三角形のヒットボックスが長方形であることを前提としています。
は完全代わりに長方形の形状に合わせヒットボックスを持ってする方法はありますか?これはそれを行うための最も簡単な方法だろう
override func touchesBegan(touches: Set<UITouch>, withEvent event: UIEvent?)
{
let touch = touches.first
let touchPosition = touch!.locationInNode(self)
self.enumerateChildNodesWithName("triangle") { node, _ in
// do something with node
if node is SKShapeNode {
if let p = (node as! SKShapeNode).path {
if CGPathContainsPoint(p, nil, touchPosition, false) {
print("you have touched triangle: \(node.name)")
let triangle = node as! SKShapeNode
// stuff here
}
}
}
}
}
それは私が望んでいたまさにです!また、 "triangle"という名前のノードはすべてSKShapeNodesですが、 'enumerateChildNodesWithName'の後に追加できます。' let shapenode = node! SKShapeNode'、およびノードがSKShapeNode'とであれば、 '削除' P =(!SKShapeNodeとしてノード)ちょうど '場合CGPathContainsPoint(shapenode.path、nilに、偽touchPosition)'を持っている.path'をしましょうか? – Drakalex
それはsafetlyではありません、enumerateChildNodesWithNameはジェネリックSKNodeで動作します;)、リンゴのガイドを見てみましょう:https://developer.apple.com/reference/spritekit/sknode/1483024-enumeratechildnodeswithname –