나는 내가 생성하고 CGPath를 부여한 SKShapeNode를 가지고 있습니다. 이 didMoveToView 내 GameScene.swift에 있습니다라인 인 SKShapeNode에서 터치 감지
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를 전혀 등록하지 않습니다.
두 점 사이에 선이 편리한 초기화를 호출하지 않고있는 SKShapeNode을 만들 수있는 더 나은 방법이 있나요 :
정말, 나는 성운이 세 가지 질문이? 노드에 추가 로직을 추가하기 위해 SKShapeNode를 서브 클래 싱하는 계획을 갖고 있으며 서브 클래스는 수퍼 클래스의 편리한 초기화 프로그램에 액세스 할 수 없습니다.
더 중요한 것은 장면에서 내 회선 노드를 인식하고 touchesEnded를 트리거하는 방법은 무엇입니까?
그 메커니즘을 사용하면 좀 더 "퍼지 (fuzzy)"하게 만들 수있는 방법이 있습니까? 줄에 가깝게 줄을 처리하는 방법이 있습니까? 내 궁극적 인 계획은 더 얇게 만드는 것이지만 여전히 큰 터치 존을 갖고 싶습니다. 나는 아무 것도 없다면 두 개의 노드를 만들 수 있습니다 : 맑은/두껍고 다른 빨강/얇은 손잡이와 맑은 것에 대한 터치 이벤트를 처리합니다. 그러나 더 좋은 방법이 있는지 알고 싶습니다.
확인하려면 화면의 동적 인 라인 수를 어떻게 확장합니까? 또한 nodeAtPoint()를 잡는 대신 왜 그렇게할까요? https://developer.apple.com/library/ios/documentation/GraphicsAnimation/Conceptual/SpriteKit_PG/Nodes/Nodes.html는 포인트를 교차하는 최상위 노드가 무엇인지 결정하기 위해'nodeAtPoint()'를 제안합니다. –
줄을 초기화 할 때 각 줄의 이름을 지정한 다음 얼마나 많은 줄이 있는지 확인하기 위해 줄을 나열합니다. 'nodeAtPoint()'를 사용하는 것에 관해서, 나는 그것을 시도해 보았고 당신과 같은 문제가 노드에 의해 결코 발견되지 않았다. 이런 이유로 나는 CGRectContainsPoint를 사용했다. –
'CGRectContainsPoint()'방식으로 가면 프레임이 직사각형이고 내 선이 대각선이기 때문에 선상에 아무 것도 없을 때 터치를 감지합니다. 그래서 저는 대각선으로 정의 된 직사각형을 탭하기 때문에 "선"을 두드리고 있다고 생각합니다. –