2013-10-08 7 views
3

내 목표는 SKSpriteNode의 개요와 일치하는 CGPath를 만드는 것입니다.SKSpriteNode의 윤곽선과 일치하는 CGPath를 만드는 방법이 있습니까?

이것은 물리학 경로뿐만 아니라 SKSpriteNodes의 광선/윤곽선을 만드는 데 유용합니다.

내가 가진 한 가지 생각은 CIImage에서별로 효과가 없었으므로 픽셀 단위로 이미지에 액세스/수정하는 방법이 있는지 모르겠습니다.

그럼 어쩌면 내가 목표 - C이 같은 포트 뭔가 할 수있을 것입니다 :

또한 http://www.sakri.net/blog/2009/05/28/detecting-edge-pixels-with-marching-squares-algorithm/

모든 스프라이트 모양 패스를 만들어 나에게 반대로 자동화 된이 과정을 다른 방법으로 매우 개방 나는 물리학이나 윤곽선/광선 효과를 위해 만들었다.

+0

이것은 모든 사람들이 @prototypical에 곤란을 겪었습니다. – DogCoffee

답변

5

당신이 찾고있는 것은 윤곽 추적 알고리즘입니다. Moore neighbor tracing은 인기가 높으며 이미지와 타일 맵에서 잘 작동합니다. 그러나 귀하의 목적에 더 잘 맞을 수 있기 때문에 check out the alternatives을하십시오.

AFAIK 행진 사각형과 윤곽 추적은 동일한 (클래스)의 알고리즘이 아니더라도 밀접하게 관련됩니다.

타일 맵 (타일에서 물리 도형을 만드는 데 대한 구현)은 Kobold Kit에 포함됩니다. 알고리즘 본문은 traceContours method of KKTilemapLayerContourTracer.m에 있습니다.

실제로는 더 복잡해 보이지만 다른 한편으로는 걷는 알고리즘이기 때문에 머리를 감싸는 데 시간이 걸립니다. 즉, 이전 단계의 결과가 현재 단계에서 사용됩니다. 결정.

KK 구현에는 타일 맵에 대한 몇 가지 사소한 수정 사항도 포함됩니다. 즉, 두 개 이상의 가로 또는 세로로 연결된 타일이 선을 타일 크기의 세그먼트로 나누는 대신 단일 선이됩니다. 또한 커스텀 포인트 배열 구조로 만들어졌고, SK로 포팅 할 때 그 작업을 계속하는 것이 더 쉬울 것이라는 결론을 얻었습니다. 그리고 결국에는 포인트 배열을 CGPath 객체로 변환하기 만했습니다.

추적하려는 도형이 경계선에 닿지 않을 것이라고 가정하고 대각선으로 만 연결된 타일을 사용할 수없는 경우 특정 최적화를 할 수 있습니다. 이 모든 것은 실제로 자신의 목적을 위해 알고리즘을 구현할 때 더 명확 해집니다.

그러나 기성품의 모든 목적에 맞는 해결책은 다음과 같습니다. 아무 것도 없습니다.

+0

고마워요, 오늘이 내용을 확인하고 그것이 내 필요에 얼마나 잘 맞는지 보겠습니다. – prototypical