作成して CGPath を指定した SKShapeNode があります。これは、didMoveToView の私の GameScene.swift にあります。
let myNode = SKShapeNode()
let lineToDraw = CGPathCreateMutable()
CGPathMoveToPoint(lineToDraw, nil, 0, 0)
CGPathAddLineToPoint(lineToDraw, nil, 87, 120)
myNode.path = lineToDraw
myNode.strokeColor = SKColor.redColor()
myNode.lineWidth = 20
myNode.name = "My Node!"
world.addChild(myNode) // World is a higher-level node in my scene
そして、これがシーンでのタッチの検出方法です。
override func touchesEnded(touches: NSSet!, withEvent event: UIEvent!) {
if let touch = touches.anyObject() as? UITouch {
if let shapeNode = nodeAtPoint(touch.locationInNode(self)) as? SKShapeNode {
println("Touched \(shapeNode.name)")
} else {
println("Nothing here")
}
}
}
回線ノードは問題なく表示されています。ただし、 touchesEnded はまったく登録されていません。
本当に、これには漠然とした 3 つの質問があります。
便利な初期化子を呼び出さずに 2 点間の線である SKShapeNode を作成するより良い方法はありますか? SKShapeNode をサブクラス化してノードに追加のロジックを追加する予定ですが、サブクラスはスーパークラスの便利な初期化子にアクセスできません。
さらに重要なことは、シーンにライン ノードを認識させ、touchesEnded をトリガーさせる方法を教えてください。
そのメカニズムを使用して、もう少し「あいまい」にする方法はありますか? 最終的には薄くする予定ですが、それでもタッチゾーンを広くしたいです。他に何もないとしても、1つはクリア/シック、もう1つはレッド/シンの2つのノードを作成し、クリアなノードでタッチイベントを処理できますが、もっと良い方法があるかどうか知りたいです。