2014-11-21 77 views
1

我正在構建一個2D遊戲使用SpriteKit,這就是我想實現的。SpriteKit中的「碰撞映射」

想象一下垂直滾動SKSpriteNode代表一棟高樓。建築物使用簡單的圖像來表現,並且具有0123'(iOS 8引入)的物理機構,因此它緊密跟隨建築物的路徑。

該建築的一些部分是特殊的。碰撞這些部分應該產生一個特殊的碰撞行爲。例如,觸摸建築物的牆壁將觸發動作1,但觸摸任何窗口將觸發動作2

我無法做到的是以某種方式定義建築的那些「特殊塊」。

我正在考慮爲每個建築物的精靈圖像製作一些「碰撞圖」,這些圖像基本上是一個透明的圖像,其中包含非透明塊,用於確定建築物的可碰撞部分。 (:建築圖像,右:碰撞地圖圖像左):以下所示的簡單的例子

Building image Collision map image

這種方法的問題是,像上面的一個「碰撞地圖」圖像設置SKPhysicsBody時,身體並不適用於所有的方塊,而是隻包圍其中一個單獨的方塊。換句話說:一個物理體可以應用於圖像中只有一個連續的塊。

最後,我想知道在確定非連續碰撞圖時,您使用了哪種方法。

P.s .:建築的SKSpriteNode表現爲多個獨特的紋理圖像,這些圖像一個接一個地垂直滾動。

預先感謝您。

回答

1

只是一個想法: 你不能使用兩個精靈對於處於在同一個地方的建設: - 一個代表建築物的物理體(從圖像中左側的一個) - 反轉的碰撞映射圖像以獲得單個物理體塊。特殊區域應該與非特殊區域重疊一個像素

希望你明白我的意思。這只是一個想法

+0

感謝您張貼您的想法。一個問題:我將如何能夠確定與特殊區域的碰撞? – damirstuhec 2014-11-23 21:58:41

+0

您可以定義兩個不同的碰撞類別並區分:func didBeginContact(contact:SKPhysicsContact)let category = contact.bodyA.categoryBitMask | contact.bodyB.categoryBitMask if category == collisionExtraCategory | collisionShipCategory ||類別== collisionExtraCategory | collisionShieldCategory { – Stefan 2014-11-23 22:06:16

+0

抱歉。註釋中的代碼格式不是真的可行。這個想法是,兩個精靈都有不同的類別。在didBeginContact裏面,您可以檢查是否發生了與精靈A或B的碰撞。 – Stefan 2014-11-23 22:09:59