2015-01-22 2 views
1

이처럼 더 복잡한 SKPhysicsyBody를 어떻게 만들 수 있을지 궁금합니다. 나는 검은 부분을 다시 히트 테스트하고 싶다. 구멍이있는 SKPhysicsBody를 만드는 방법은 무엇입니까?

enter image description here

가 나는 CG 사각형에 PaintCode에이 모양을 수출했다.

var barrierpath2Path = UIBezierPath() 
     barrierpath2Path.moveToPoint(CGPointMake(52, 26)) 
     barrierpath2Path.addLineToPoint(CGPointMake(52, 26)) 
     barrierpath2Path.addCurveToPoint(CGPointMake(26, 52), controlPoint1: CGPointMake(52, 40.36), controlPoint2: CGPointMake(40.36, 52)) 
     barrierpath2Path.addLineToPoint(CGPointMake(26, 52)) 
     barrierpath2Path.addCurveToPoint(CGPointMake(0, 26), controlPoint1: CGPointMake(11.64, 52), controlPoint2: CGPointMake(0, 40.36)) 
     barrierpath2Path.addLineToPoint(CGPointMake(0, 26)) 
     barrierpath2Path.addCurveToPoint(CGPointMake(26, 0), controlPoint1: CGPointMake(0, 11.64), controlPoint2: CGPointMake(11.64, 0)) 
     barrierpath2Path.addLineToPoint(CGPointMake(26, 0)) 
     barrierpath2Path.addCurveToPoint(CGPointMake(52, 26), controlPoint1: CGPointMake(40.36, 0), controlPoint2: CGPointMake(52, 11.64)) 
     barrierpath2Path.closePath() 
     barrierpath2Path.moveToPoint(CGPointMake(46.8, 26)) 
     barrierpath2Path.addLineToPoint(CGPointMake(46.8, 26)) 
     barrierpath2Path.addCurveToPoint(CGPointMake(39, 18.2), controlPoint1: CGPointMake(46.8, 21.69), controlPoint2: CGPointMake(43.31, 18.2)) 
     barrierpath2Path.addLineToPoint(CGPointMake(39, 18.2)) 
     barrierpath2Path.addCurveToPoint(CGPointMake(31.2, 26), controlPoint1: CGPointMake(34.69, 18.2), controlPoint2: CGPointMake(31.2, 21.69)) 
     barrierpath2Path.addLineToPoint(CGPointMake(31.2, 26)) 
     barrierpath2Path.addCurveToPoint(CGPointMake(39, 33.8), controlPoint1: CGPointMake(31.2, 30.31), controlPoint2: CGPointMake(34.69, 33.8)) 
     barrierpath2Path.addLineToPoint(CGPointMake(39, 33.8)) 
     barrierpath2Path.addCurveToPoint(CGPointMake(46.8, 26), controlPoint1: CGPointMake(43.31, 33.8), controlPoint2: CGPointMake(46.8, 30.31)) 
     barrierpath2Path.closePath() 
     barrierpath2Path.moveToPoint(CGPointMake(27.3, 14.74)) 
     barrierpath2Path.addLineToPoint(CGPointMake(27.3, 14.74)) 
     barrierpath2Path.addCurveToPoint(CGPointMake(19.5, 6.94), controlPoint1: CGPointMake(27.3, 10.43), controlPoint2: CGPointMake(23.81, 6.94)) 
     barrierpath2Path.addLineToPoint(CGPointMake(19.5, 6.94)) 
     barrierpath2Path.addCurveToPoint(CGPointMake(11.7, 14.74), controlPoint1: CGPointMake(15.19, 6.94), controlPoint2: CGPointMake(11.7, 10.43)) 
     barrierpath2Path.addLineToPoint(CGPointMake(11.7, 14.74)) 
     barrierpath2Path.addCurveToPoint(CGPointMake(19.5, 22.54), controlPoint1: CGPointMake(11.7, 19.05), controlPoint2: CGPointMake(15.19, 22.54)) 
     barrierpath2Path.addLineToPoint(CGPointMake(19.5, 22.54)) 
     barrierpath2Path.addCurveToPoint(CGPointMake(27.3, 14.74), controlPoint1: CGPointMake(23.81, 22.54), controlPoint2: CGPointMake(27.3, 19.05)) 
     barrierpath2Path.closePath() 
     barrierpath2Path.moveToPoint(CGPointMake(27.3, 37.26)) 
     barrierpath2Path.addLineToPoint(CGPointMake(27.3, 37.26)) 
     barrierpath2Path.addCurveToPoint(CGPointMake(19.5, 29.46), controlPoint1: CGPointMake(27.3, 32.95), controlPoint2: CGPointMake(23.81, 29.46)) 
     barrierpath2Path.addLineToPoint(CGPointMake(19.5, 29.46)) 
     barrierpath2Path.addCurveToPoint(CGPointMake(11.7, 37.26), controlPoint1: CGPointMake(15.19, 29.46), controlPoint2: CGPointMake(11.7, 32.95)) 
     barrierpath2Path.addLineToPoint(CGPointMake(11.7, 37.26)) 
     barrierpath2Path.addCurveToPoint(CGPointMake(19.5, 45.06), controlPoint1: CGPointMake(11.7, 41.57), controlPoint2: CGPointMake(15.19, 45.06)) 
     barrierpath2Path.addLineToPoint(CGPointMake(19.5, 45.06)) 
     barrierpath2Path.addCurveToPoint(CGPointMake(27.3, 37.26), controlPoint1: CGPointMake(23.81, 45.06), controlPoint2: CGPointMake(27.3, 41.57)) 
     barrierpath2Path.closePath() 
     barrierpath2Path.miterLimit = 4; 



     monster.physicsBody = SKPhysicsBody(polygonFromPath: barrierpath2Path.CGPath) 

하지만 시뮬레이터에는 하나의 구멍 (및 png 뒤)이 표시됩니까? 여기 뭐가 잘못 됐니? enter image description here

+2

그래서 게임 프로그래밍에 그냥 머리까지, 당신은 일반적으로 물리기구가 간단한 형태로 의미, 즉 설계되어 신체의 물리학 사용하는 방법이 아니다 (한 번에 위의 하나 물리학 몸을 그리지 않는다 .. 삼각형, 사각형, 원). 특히 SKPhysicsBody (오목면과 볼록면의 문제가 있음). 당신은 물리학 체를 분리 된 부분으로 나누고 가능한 한 가까이서 육체를 형성 할 것입니다. 렌더링시 다각형이라고 생각하십시오. – TheCodingArt

+0

감사합니다. 나는 그 모양이 그대로 필요합니다. 그러나 나는 작은 물리학 체에서 그 모양을 재건하는 방법을 모른다. 아마도 PhysicsBody가 아닌 다른 것을 찾아야 할 것입니다. 예 : CGPathContainsPoint() – fabian

+0

다음과 같은 작업을 원하는지 여부에 따라 달라집니다. a) 전체 모양을 이동할 수 있어야합니다. b) 몸체가 구멍 외부의 모양과 다른 몸체 모두와 충돌해야합니다. 그것을 움직일 필요가 없다면 윤곽 체인/윤곽선을 윤곽선으로 설정할 수 있습니다. – LearnCocos2D

답변

2

대부분의 경우 홀 자체 노드를 자신의 물리 본문으로 만들고 싶습니다. 이렇게하면 모든 것이 각각의 물리 기관을 가지며 아무런 문제없이 서로 따라 움직일 수 있습니다.

이 대답에 대해 자세히 설명하기 위해 SKPhysicsBody 편의 초기화 프로그램을 사용하여 텍스처 내의 알파 치 이렇게하면 실적이 저하되지만 원하는대로해야합니다.

l.physicsBody = SKPhysicsBody(texture: l.texture, size: l.size) 
+0

이것이 왜 허용 된 대답이 아닌지 확실하지 않습니다. 이것은 무엇이 요구되는지를 달성하는 가장 쉬운 방법 일 것입니다! :) –

+0

슬프게도'SKPhysicsBody (texture : size :)'는 불연속적인 도형을 처리하지 않습니다. 질문에 표시된 스프라이트를 감안할 때, 그것은 단지 외부 원을 생성 할 것입니다. – ReactiveRaven

관련 문제