2014-10-07 1 views
1

SpriteKit에서 게임을 만들고 있습니다. 커다란 문제가 있습니다. 온라인과 심지어 Apple 웹 사이트에서 두 위치 (CGPoint) 사이에서 노드를 찾을 수있는 방법을 찾을 수 없습니다. UiSwipeGesture 메서드를 사용하면 왼쪽, 오른쪽, 위, 아래 방향 만 스 와이프를 찾을 수 있습니다.두 점 (cgpoint)에서 스프라이트를 감지합니다. sprite kit - swift

그래서 슬라이드를 만드는 다른 방법 (아래 코드 참조)을 발견했지만 두 위치 사이에 어떤 노드가 있음을 이해하는 방법을 찾을 수 없습니다.

누군가 나를 도울 수 있습니까? 여기에 감사

코드 :

var locationBegan : CGPoint = CGPoint() 
var locationEnded : CGPoint = CGPoint() 
var objectbegan : SKNode = SKNode()  

override func touchesBegan(touches: NSSet, withEvent event: UIEvent) { 
    for touch: AnyObject in touches 
    { 
     let location: CGPoint! = touch.locationInNode(self) 
     self.locationBegan = location 
     var nodeAtPoint : SKNode = self.nodeAtPoint(location) 
     self.objectbegan = nodeAtPoint 

    } 
} 

override func touchesEnded(touches: NSSet, withEvent event: UIEvent) { 
    for touch: AnyObject in touches { 
     let location: CGPoint! = touch.locationInNode(self) 
     self.locationEnded = location 
     var nodeAtPoint : SKNode = self.nodeAtPoint(location) 

     var finalDestination : CGPoint = GetFinalDestination(location, nodeAtPoint: self.objectbegan) 
     nodeAtPoint.runAction(SKAction.moveTo(finalDestination, duration: 1)) 

    } 
} 

방법 locationBegan와 locationEnded 사이의 노드를 찾을? 감사합니다

왼쪽, 오른쪽, 위, 아래뿐만 아니라 모든 방향으로 슬쩍 노드를 찾을 수있는 방법을 조언 해 줄 수 있습니까? 감사

UPDATE 는 실행의 노드이 속성을 설정하십시오

당신은 SKPhysicsBody은 일단 당신이, 당신은 SKPhysicsWorld 년대를 사용할 수 있습니다 찾으려는 노드에 설정되어 있지만 s는 있어야
node.physicsBody = SKPhysicsBody(circleOfRadius: 5) 
node.physicsBody?.dynamic = false 

답변

1

bodyAlongRayStart:end:.

bodyAlongRayStartSKPhysicsBody?을 반환하므로 사용하기 위해 포장을 풀어야합니다. 그런 다음 SKNode이 필요한 경우 SKPhysicsBody이라는 node 속성을 사용합니다 (이는 SKNode?을 반환하므로이 값도 사용하지 않아야 함). SKScenephysicsWorld 속성을 사용하여 bodyAlongRayStart으로 전화하십시오. 당신이 그 기능과 옵션 바인딩을 호출 결합 할 경우, 같은 것을 보일 것이다 :

if let physicsBody = scene.physicsWorld.bodyAlongRayStart(locationBegan, end: locationEnded) { 
    if let node = physicsBody.node { 
     /* do something with node here */ 
    } 
} 

당신이 기다리고있어 (당신은 아마) 그 선을 따라 하나 이상의 SKNode을 할 경우를, 당신은 사용하십시오 enumerateBodiesAlongRayStart:end:usingBlock: 대신

+0

내가 생각할 수있는 유일한 방법은 다음과 같습니다. 1. 노드에'physicsBody' 세트가 없습니다. 2. 노드의'physicsBody'는 여러분이보기에 노드를 보았던 곳으로부터 오프셋되어 있습니다 (이것은 실제로 매우 일반적입니다). 3.'locationBegan'에서'locationEnded'까지의 광선은 실제로 어떤 것도 교차하지 않습니다. 이것을 확인하기 위해 할 수있는 한 가지 방법은 ['showPhysics'] (https://developer.apple.com/library/IOs/documentation/SpriteKit/Reference/SKView/index.html#//apple_ref/occ/)를 설정하는 것입니다. instp/SKView/showsPhysics) 속성을'true'로 설정하여'physicsBody'가 어디에 있는지 볼 수 있습니다. –

+0

Very Very Thanks, 문제는 node on physicsBody입니다. Now Works –

+0

마지막 질문 하나, 나는 슬라이드와 마지막 터치 (locationEnded)의 위치를 ​​포착 한 노드를 기반으로 계산해야합니다. 제 문제는 초보자인데 아직 움직일 수 없기 때문에 SKNode에서 발견 한 nodo.physicsworld를 어떻게 설정할 수 있는지 알고 싶습니다. var node = self.scene? .physicsWorld.bodyAlongRayStart (locationBegan, end : location) var nodeNow : SKNode = node? .node 하지만 작동하지 않아서 오류가 발생하며 착용하고 제거해야합니다! 줄 끝에서. 감사합니다. –

관련 문제