SKNode 인 사용자 정의 클래스가 있으며,이 클래스에는 여러 SKSpriteNodes가 있습니다. 내 게임 장면에서이 자식 SKSpriteNodes에 대한 접촉을 감지 할 수있는 방법이 있습니까?SpriteKit에서 객체의 자식 노드에 대한 접촉을 감지합니다.
나는 빠른
SKNode 인 사용자 정의 클래스가 있으며,이 클래스에는 여러 SKSpriteNodes가 있습니다. 내 게임 장면에서이 자식 SKSpriteNodes에 대한 접촉을 감지 할 수있는 방법이 있습니까?SpriteKit에서 객체의 자식 노드에 대한 접촉을 감지합니다.
나는 빠른
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
당신은
당신은 위치를 얻을 수 있습니다 SKNode의 위치로 터치의 위치를 비교해야합니다 locationInNode()를 사용하여 다음 방법 중 하나에서 터치 할 수 있습니다.
애플의 SceneKitVehicle 데모를 검사합니다. 누군가 친절하게 ported it to 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는 스토리 보드를 통해 앱의보기 클래스로 설정됩니다.
좀 더 자세히 pls – user3138007