我正在构建一个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