2014-11-21 11 views
1

저는 2D 게임을 사용하여 SpriteKit을 사용하고 있습니다. 이것이 내가 달성하고 싶은 것입니다.SpriteKit의 "Collision Map"

고층 빌딩을 나타내는 세로 스크롤 SKSpriteNode을 상상해보십시오. 건물은 단순한 이미지를 사용하여 표현되며 물리 구조가 + (SKPhysicsBody *)bodyWithTexture:(SKTexture*)texture size:(CGSize)size; (iOS 8에서 도입 됨)으로 설정되어 있기 때문에 건물의 경로를 따르고 있습니다.

일부 건물은 특별합니다. 그 부분들과 충돌하는 것은 특별한 충돌 행동을 야기해야합니다. 예를 들어 건물 벽을 건 드리면 액션 1이 발생하지만 창을 터치하면 액션 2이 발생합니다.

내가 할 수 없었던 것은 건물의 "특수 블록"을 어떤 식 으로든 정의하는 것입니다.

건물의 충돌 가능한 부분을 결정하는 투명하지 않은 블록이있는 기본적으로 투명한 이미지 인 건물의 스프라이트 이미지 각각에 대해 일종의 "충돌 맵"을 만들려고했습니다. (충돌지도 이미지 : 이미지, 오른쪽 건물 왼쪽) : 울부 짖는 소리 같이 간단한 예를

Building image Collision map image

이 접근 방식의 문제는 위와 같은 "충돌 맵"이미지에 SKPhysicsBody를 설정할 때 , 몸체는 모든 블록에 적용되지 않지만 그 블록들 중 하나만 둘러 싸게됩니다. 다시 말해서, 하나의 물리학 체는 이미지의 하나의 연속 블록에만 적용될 수 있습니다.

결론적으로, 비 연속 충돌 맵을 결정할 때 어떤 접근 방식을 사용하고 있는지 알고 싶습니다.

건물의 SKSpriteNode은 수직으로 차례로 스크롤되는 여러 개의 독특한 텍스처 이미지로 표현됩니다.

미리 감사드립니다.

답변

1

그냥 아이디어 : 당신은 같은 장소에 위치하는 건물이 개 스프라이트 사용할 수 없습니다 : 은 - 당신의 충돌을 반전 - 한 건물의 물리적 본체 (이미지에서 왼쪽 하나) 를 나타냅니다 맵 이미지를 사용하여 단일 물리 본문 블록을 얻습니다. 특수 영역은 비 특수 영역과 1 픽셀 겹쳐 야합니다.

내 뜻을 이해했으면 좋겠다. 아이디어입니다.

+0

아이디어를 게시 해 주셔서 감사합니다. 한 가지 질문 : 특수 영역과의 충돌을 어떻게 결정할 수 있습니까? – damirstuhec

+0

두 가지 충돌 범주를 정의하고 내부를 구별 할 수 있습니다. func didBeginContact (contact : SKPhysicsContact) { let category = contact.bodyA.categoryBitMask | contact.bodyB.categoryBitMask if category == collisionExtraCategory | collisionShipCategory || category == collisionExtraCategory | collisionShieldCategory { – Stefan

+0

죄송합니다. 주석의 코드 형식화는 실제로 불가능합니다. 아이디어는 두 스프라이트가 다른 범주를 갖는다는 것입니다. didBeginContact 내부에서 스프라이트 A 나 B로 충돌이 발생했는지 확인할 수 있습니다. – Stefan