2013-10-28 4 views
2

현재 스프라이트 노드의 왼쪽이나 오른쪽에 바로 스프라이트 노드가 있는지 감지하려고합니다.SpriteKit bodyInRect 노드가 발견되지 않아야합니다.

이것은 간단하지만 이상한 행동을하고 있습니다.

나는 현재 노드와 같은 높이이고 현재 노드와 같은 원점을 가진 얇은 사각형 (너비 = 1 포인트)을 만들었습니다.

예컨대 :

// Create a thin rect that's aligned to the left edge of 'block' 
CGRect adjacentFrame; 
adjacentFrame = CGRectMake(block.frame.origin.x, 
          block.frame.origin.y, 
          1, 
          block.frame.size.height); 

// Shift the rect left a few points to position it to the left of 'block' 
adjacentFrame.origin.x -= 10; 

그런 다음 그 RECT (adjacentFrame)이 노드를 교차되어 있는지 테스트 :

SKPhysicsBody* obstructingBody; 
obstructingBody = [self.physicsWorld bodyInRect:adjacentFrame]; 

지금, 이상한 일이다, obstructingBody는 '블록'자체를 포함하고 있습니다!

rect의 위치를 ​​확인할 수 있도록 인접 프레임 프레임이있는 SpriteNode를 장면에 추가하는 코드도 추가했습니다. 그것은 분명히 '블록'의 왼쪽 몇 점을 표시하고 분명히 그것을 만지지 않습니다!

여기에 어떤 일이 벌어 질 수 있으리라 생각합니다.

덕분에, 크리스

답변

0

bodyInRect 장면 좌표를 필요로한다. block.parent의 좌표 공간에 좌표를 제공합니다. block.parent 장면 자체가 아니라면, 당신과 기원을 변환해야합니다

CGRect blockFrame = block.frame; 
blockFrame.origin = [self convertPoint:blockFrame.origin toNode:self.scene]; 

은 또한 블록의 폭이 10 미만이어야합니다 그렇지 않으면 -10 블록의 프레임 외부 프레임을 이동하는 것만으로는 충분하지 않습니다 오프셋.

+0

답변 해 주셔서 감사합니다. block.Parent는 실제로 장면 자체이므로 괜찮아 보일 것입니다. 테스트하기 위해 필자는 bodyInRect에 대한 호출에서 rect에있는 장면에 스프라이트를 추가 했으므로 테스트중인 영역을 시각적으로 볼 수 있습니다. 테스트 스프라이트는 '블록 위치'외부에서 화면을 그립니다. 그래서 왜 그것이 '블록'자체를 반환하는지 알 수 없습니다. – displaced

관련 문제