我正在構建一個2D遊戲使用SpriteKit
,這就是我想實現的。SpriteKit中的「碰撞映射」
想象一下垂直滾動SKSpriteNode
代表一棟高樓。建築物使用簡單的圖像來表現,並且具有0123'(iOS 8引入)的物理機構,因此它緊密跟隨建築物的路徑。
該建築的一些部分是特殊的。碰撞這些部分應該產生一個特殊的碰撞行爲。例如,觸摸建築物的牆壁將觸發動作1,但觸摸任何窗口將觸發動作2。
我無法做到的是以某種方式定義建築的那些「特殊塊」。
我正在考慮爲每個建築物的精靈圖像製作一些「碰撞圖」,這些圖像基本上是一個透明的圖像,其中包含非透明塊,用於確定建築物的可碰撞部分。 (:建築圖像,右:碰撞地圖圖像左):以下所示的簡單的例子
這種方法的問題是,像上面的一個「碰撞地圖」圖像設置SKPhysicsBody
時,身體並不適用於所有的方塊,而是隻包圍其中一個單獨的方塊。換句話說:一個物理體可以應用於圖像中只有一個連續的塊。
最後,我想知道在確定非連續碰撞圖時,您使用了哪種方法。
P.s .:建築的SKSpriteNode
表現爲多個獨特的紋理圖像,這些圖像一個接一個地垂直滾動。
預先感謝您。
感謝您張貼您的想法。一個問題:我將如何能夠確定與特殊區域的碰撞? – damirstuhec 2014-11-23 21:58:41
您可以定義兩個不同的碰撞類別並區分: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
抱歉。註釋中的代碼格式不是真的可行。這個想法是,兩個精靈都有不同的類別。在didBeginContact裏面,您可以檢查是否發生了與精靈A或B的碰撞。 – Stefan 2014-11-23 22:09:59